c# - EF 代码第一次迁移 : recreate database and Seed

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

我在 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() 方法,而没有 SeedSeed 方法仅在应用重启后调用。

如果我在第一次启动之前手动调用 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/

相关文章:

c# - EF 运行种子方法,无需更改模型

c# - Entity Framework - Include() 加载所有子属性,甚至是虚拟属性

entity-framework - Entity Framework (CTP5、Fluent API)。重命名导航属性列

C# 异常解析.Double

sql-server - SaveChanges 上的 Entity Framework 间歇性超时

sql-server - 将 DateTime[] 作为 SQL 参数传递给 ObjectContext.ExecuteStoreCommand

c# - 如何使用 LinQ 获取 IQueryable() 而不是 List()?

c# - ListBox ItemTemplate 中的按钮未选择项目

c# - 是否可以在 gsoap 的单独线程中执行函数?

c# - 从现有 API 自动生成服务器端 WCF 服务