[英]EF Code First Migrations: recreate database and Seed
我使用MigrateDatabaseToLatestVersion
初始化和Seed
法DbMigrationConfiguration
:
public sealed class Configuration : DbMigrationsConfiguration<Context>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
ContextKey = "...";
}
protected override void Seed(Context context)
{
context.MyEntities.AddOrUpdate(p => p.Name, new[]
{
new MyEntity { Name = "Name 1" },
});
context.SaveChanges();
}
}
自动迁移可以在现有数据库上正常运行。 但是,当不存在现有数据库(* .mdf,LocalDb)时,在第一个应用程序启动初始化程序仅从DbMigration
调用Up()
方法而不使用Seed
。 仅在应用程序重新启动后才调用Seed
方法。
如果我在首次启动之前手动调用Upgrade-Database
,它将创建数据库,并且首次运行时将调用Seed
方法。
没有现有数据库时,如何在应用程序启动时使用种子数据自动初始化数据库?
我认为这确实可以解决您的问题:
使用Entity Framework Code First迁移来自动创建和自动更新应用程序
在此代码中,数据库初始化后,将使用System.Data.Entity.Migrations.DbMigrator
的实例手动应用所有未决的迁移。
该解决方案的问题是您需要进行初始迁移。 尽管在链接的文章中没有对此进行解释,但我认为您可以通过在启用自动迁移之前从Nuget控制台创建一个针对空数据库的初始迁移。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.