[C#.NET][Entity Framework] Code-First Initial Database
在 Code First 預設有三種初始化的類別
IDatabaseInitializer 的實作,只會在資料庫不存在時重新建立資料庫,並選擇性地重新植入資料庫。 若要植入資料庫,請建立衍生類別並覆寫 Seed 方法。
DropCreateDatabaseIfModelChanges
IDatabaseInitializer 的實作,它只會在模型(POCO)於資料庫建立後已變更時刪除及重新建立資料庫,並選擇性地重新植入資料庫。
IDatabaseInitializer 的實作,只要是初次在應用程式定義域中使用內容,就一定會重新建立資料庫,並選擇性地重新植入資料庫。 若要植入資料庫,請建立衍生類別並覆寫 Seed 方法。
這些類別都不會幫我們加入資料,初始化資料庫並加入資料時我們必須要實作上面那些類別或是實作 IDatabaseInitializer ,然後在 Seed 方法將資料加上去
{ protected override void Seed(ThreeLayerDbContext context) { base.Seed(context); Account account1 = new Account() { UserId = "yao1", Password = "1234" }; Account account2 = new Account() { UserId = "yao2", Password = RandomPassword() }; Account account3 = new Account() { UserId = "yao3", Password = RandomPassword() }; Account account4 = new Account() { UserId = "yao4", Password = RandomPassword() }; context.Accounts.Add(account1); context.Accounts.Add(account2); context.Accounts.Add(account3); context.Accounts.Add(account4); context.AccountLogs.AddRange(RandomAccountLog(account1, 6)); context.AccountLogs.AddRange(RandomAccountLog(account2, 5)); context.AccountLogs.AddRange(RandomAccountLog(account3, 2)); context.AccountLogs.AddRange(RandomAccountLog(account4, 4)); context.SaveChanges(); } }
調用時,在DbContext 實體化前調用 Database.SetInitializer 方法
public BusinessFlowDao() { Database.SetInitializer(new DbInitializer()); if (this._db == null) { this._db = new ThreeLayerDbContext(); //this._db.Database.Initialize(true); } }
若上面這些初始化的行為不是你要的,當然可以自行實作 IDatabaseInitializer ,實作時會用到大量的 Database 類別,
{ public void InitializeDatabase(ThreeLayerDbContext context) { if (context.Database.Exists()) { if (!context.Database.CompatibleWithModel(true)) { context.Database.Delete(); } } //TODO 資料庫初始化處理... context.Database.Create(); context.Database.ExecuteSqlCommand("CREATE TABLE GLOBAL_DATA([KEY] VARCHAR(50), [VALUE] VARCHAR(250))"); } }
本文出自:http://www.dotblogs.com.tw/yc421206/archive/2014/12/11/147610.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET