我最近将一个应用程序从以下内容更改为开发使用:
DropCreateDatabaseIfModelChanges<Context>
使用方法:
public class MyDbMigrationsConfiguration: DbMigrationsConfiguration<GrsEntities>
{
public MyDbMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
}
在我的数据库上下文中,我有:protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Tell Code First to ignore PluralizingTableName convention
// If you keep this convention then the generated tables will have pluralized names.
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//set the initializer to migration
Database.SetInitializer(new MigrateDatabaseToLatestVersion<GrsEntities, MigrationConfig>());
}
我已经使用AddOrUpdate扩展重写了DbMigrationsConfiguration中的Seed(context),在之前使用的是Add方法,并对删除数据库时进行了种子播种(DropCreateDatabaseIfModelChanges)。我的困惑是,每次启动应用程序时都会运行迁移,无论DbContext是否有任何更改。每次我启动应用程序(通过服务运行的库)时,初始化程序都会运行,Seed也会运行。我期望的行为是检查是否需要迁移(背后检查模型是否与物理数据库匹配),然后更新任何新/删除的表/列,并只在有变化时运行种子。
在我的测试中,种子每次都运行,这是可以工作但似乎效率不高并且不是我所期望的结果。不幸的是,MSDN文档非常有限。
我是否完全误用了MigrateDatabaseToLatestVersion?有没有办法获得我期望的行为(即只有在模型更改时才进行种子操作),还是应该将我的种子方法更改为每次应用程序启动时都要运行?