我在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)时,在第一个应用程序启动初始化程序时,只调用Up()
的{{1}}方法,而不DbMigration
。仅在应用程序重新启动后才会调用Seed
方法。
如果我在第一次启动前手动调用Seed
,它将创建数据库,并在首次运行时调用Upgrade-Database
方法。
如果没有现有数据库,如何在应用程序启动时使用种子数据自动初始化数据库?
答案 0 :(得分:1)
我认为这将真正解决您的问题:
Using Entity Framework Code First Migrations to auto-create and auto-update an application
在此代码中,数据库初始化后,System.Data.Entity.Migrations.DbMigrator
的实例用于手动应用所有挂起的迁移。
此解决方案的问题是您需要初始迁移。虽然在链接的文章中没有解释,但我认为您可以通过在启用自动迁移之前从Nuget控制台创建空数据库来创建初始迁移。