EF Code First迁移:重新创建数据库和种子

时间:2014-05-25 12:17:35

标签: c# entity-framework code-first ef-migrations entity-framework-6.1

我在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方法。

如果没有现有数据库,如何在应用程序启动时使用种子数据自动初始化数据库?

1 个答案:

答案 0 :(得分:1)

我认为这将真正解决您的问题:

Using Entity Framework Code First Migrations to auto-create and auto-update an application

在此代码中,数据库初始化后,System.Data.Entity.Migrations.DbMigrator的实例用于手动应用所有挂起的迁移。

此解决方案的问题是您需要初始迁移。虽然在链接的文章中没有解释,但我认为您可以通过在启用自动迁移之前从Nuget控制台创建空数据库来创建初始迁移。