我在 DbMigrationConfiguration
中使用 MigrateDatabaseToLatestVersion
初始化程序和 Seed
方法:
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
方法将在第一次运行时被调用。
如何在没有现有数据库的情况下在应用程序启动时使用种子数据自动初始化数据库?
最佳答案
我认为这将真正解决您的问题:
Using Entity Framework Code First Migrations to auto-create and auto-update an application
在此代码中,在数据库初始化之后,System.Data.Entity.Migrations.DbMigrator
的实例用于手动应用所有挂起的迁移。
此解决方案的问题是您需要初始迁移。虽然在链接的文章中没有解释,但我认为您可以通过在启用自动迁移之前从 Nuget 控制台创建它来针对空数据库创建初始迁移。
关于c# - EF 代码第一次迁移 : recreate database and Seed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23855190/