學習ASP.NET Core Razor 編程系列目錄 學習ASP.NET Core Razor 編程系列一 學習ASP.NET Core Razor 編程系列二——添加一個實體 學習ASP.NET Core Razor 編程系列三——創建數據表及創建項目基本頁面 學習ASP.NET Core Ra ...
學習ASP.NET Core Razor 編程系列目錄
學習ASP.NET Core Razor 編程系列二——添加一個實體
學習ASP.NET Core Razor 編程系列三——創建數據表及創建項目基本頁面
學習ASP.NET Core Razor 編程系列四——Asp.Net Core Razor列表模板頁面
學習ASP.NET Core Razor 編程系列五——Asp.Net Core Razor新建模板頁面
Asp.net Core EF創建的BookContext對象,就是用於處理資料庫連接和將Book實體對象映射到資料庫表(Book)記錄的功能。資料庫上下文(BookContext)是在startup.cs文件的configureservices方法中向依賴關係註入容器註冊,代碼如下:
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<BookContext>(options =>options.UseSqlServer(Configuration.GetConnectionString("BookContext"))); services.AddMvc(); }
ASP.NET Core 配置系統會讀取資料庫連接字元串。 為了進行本地開發,它會從 appsettings.json 文件獲取資料庫連接字元串,資料庫連接配置如下:
"ConnectionStrings": { "BookContext": "Server=.\\sqlexpress;Database=CustomDB;Trusted_Connection=True;MultipleActiveResultSets=true" }
將應用程式部署到測試或生產伺服器時,可以修改Appsettings.json文件中上將配置,將資料庫連接字元串設置為真正的SQL伺服器。
給資料庫添加初始數據
在Visual Studio 2017的解決方案資源管理器中,使用滑鼠左鍵選中Models文件,然後點擊滑鼠右鍵,在彈出菜單中選擇創建一個新的類文件,命名為SeedData。用下麵的代碼替換生成的代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; namespace RazorMvcBooks.Models { public class SeedData { public static void Initialize(IServiceProvider serviceProvider) { using (var context = new BookContext( serviceProvider.GetRequiredService<DbContextOptions<BookContext>>())) { // Look for any Books. if (context.Book.Any()) { return; // DB has been seeded } context.Book.AddRange( new Book { Name = "Python編程 從入門到實踐", ReleaseDate = DateTime.Parse("2018-1-12"), Author = "埃里克·馬瑟斯", Price = 75.99M }, new Book { Name = "Java編程的邏輯", ReleaseDate = DateTime.Parse("2018-1-13"), Author = "馬俊昌", Price = 48.99M }, new Book { Name = "統計思維:大數據時代瞬間洞察因果的關鍵技能", ReleaseDate = DateTime.Parse("2017-12-23"), Author = "西內啟", Price = 39.99M }, new Book { Name = "微信營銷", ReleaseDate = DateTime.Parse("2018-01-05"), Author = "徐林海", Price = 33.99M } ); context.SaveChanges(); } } } }
以下語句的作用是 如果資料庫中有Book表,數據初始化類將返回,不添加任何數據。
// Look for any Books. if (context.Book.Any()) { return; // DB has been seeded }
添加SeedData.initializer方法
在Visual Studio 2017的解決方案資源管理器中打開Program.cs文件,然後找到Main方法,在這個方法體的最後面添加SeedData.Initialize()方法,代碼如下:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.EntityFrameworkCore; using RazorMvcBooks.Models; namespace RazorMvcBooks { public class Program { public static void Main(string[] args) { // BuildWebHost(args).Run(); var host = BuildWebHost(args); using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; try { var context = services.GetRequiredService<BookContext>(); // requires using Microsoft.EntityFrameworkCore; context.Database.Migrate(); // Requires using RazorPagesMovie.Models; SeedData.Initialize(services); } catch (Exception ex) { var logger = services.GetRequiredService<ILogger<Program>>(); logger.LogError(ex, "資料庫數據初始化錯誤."); } } host.Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build(); } }
測試應用程式
第一步,刪除資料庫中的所有記錄。 可以在瀏覽器的書籍列表頁面中使用刪除鏈接,或可以在資料庫的SQL Server Management Studio中使用刪除指令刪除。在瀏覽器我們進行瀏覽,刪除之前與之後的界面如下圖。
第二步,強制應用程式初始化(調用 Startup 類中的方法),這樣SeedData方法能夠正常運行。如果要強制初始化,必須先停止IIS,然後再重新啟動。您可以使用以下方法:
1. 在通知區域中右鍵單擊IIS Express系統托盤圖標,在彈出菜單中使用滑鼠左鍵點擊“退出”或“停止站點。如下圖。
2. 如果是在非調試模式下運行 Visual Studio 2017 ,請按 F5 以在調試模式下運行。
3. 如果是在調試模式下運行 Visual Studio 2017 ,請先停止調試程式,並再按 F5。
第三步,在瀏覽器中瀏覽我們添加到資料庫的初始化數據,如下圖。下圖1處,是原來的數據,圖2是我們應用程式初始化添加進行的數據。仔細觀察一下ReleaseDate與Price,可以發現有區別。