Code First自動更新數據庫有幾種方法
Code First什么都不做
Database.SetInitializer<ShopContext>(null);
發布網站的話一般要在Application_Start方法里加上這句,發布后不需要Code First了。
Code First總是重建數據庫並重設數據庫種子
Database.SetInitializer(new DropCreateDatabaseAlways<MyContext, DAL.Configuration>());
Code First僅在模型更改時重建數據庫並重設數據庫種子
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext, DAL.Configuration>());
可是這幾種在開發階段都不適合,因為我並不希望重建數據庫,只是想增量更新數據庫,於是又找到一種
Code First增量更新數據庫並增量更新數據庫種子
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, DAL.Migrations.Configuration>());
其中DAL.Migrations.Configuration如下
1 public class Configuration : DbMigrationsConfiguration<MyContext> 2 { 3 public Configuration() 4 { 5 //允許代碼自動遷移數據庫 6 AutomaticMigrationsEnabled = true; 7 //允許自動遷移時數據丟失(如刪除列) 8 AutomaticMigrationDataLossAllowed = true; 9 } 10 11 protected override void Seed(MyContext context) 12 { 13 context.Account.AddOrUpdate(o => o.AccountName, new SH_Account 14 { 15 AccountName = "admin", 16 NickName = "管理員", 17 AccountPwd = "123456", 18 Email = "4564589@qq.com", 19 Phone = "13289463547" 20 }); 21 } 22 }
可是,我發現DbMigrationsConfiguration依然有不少問題,比如修改字符串長度限制的話執行增量更新數據庫是會報錯的,去除帶外鍵的字段加帶外鍵的字段也容易報錯,並且一旦出錯基本就只能刪除數據庫重新執行了,也就是說DbMigrationsConfiguration並不是很可靠,誰知道怎么解決這個困擾呢。。。