实体框架迁移 - 即使没有迁移,Seed也会运行?

时间:2013-03-22 21:35:40

标签: entity-framework database-migration

我已使用AutomaticMigrationsEnabled = false设置了一个简单的迁移。视觉工作室或使用MigrateDatabaseToLatestVersion时,一切都很好。

然而,这对我来说并不理想。我想从我的ci服务器上的部署脚本运行迁移。我发现this article使用migrate.exe 解释了如何执行此操作,但这似乎始终运行种子。即使没有要应用的迁移,也是如此。

我是否需要在Seed方法中以编程方式检查是否已运行任何迁移?我该怎么做?

1 个答案:

答案 0 :(得分:5)

仅当存在待定迁移时,才使用DbMigrator手动运行Update()。它是在Entity Framework 5.0中引入的。

private void MigrateAndSeedDbIfSchemaIsOutdated()
{
    // Disable initializer.
    Database.SetInitializer<MyContext>(null);

    // Make sure database exists.
    using (var db = new MyContext())
    {
        db.Database.Initialize(false);
    }

    var migrator = new DbMigrator(new MyConfiguration());

    if (migrator.GetPendingMigrations().Any())
    {
        // Run migrations and seed.
        migrator.Update();
    }
}