显示代码

时间:2015-09-30 17:55:00

标签: entity-framework ef-code-first entity-framework-6 ef-migrations

背景

我们在地理位置分散的团队中工作。每隔一段时间,世界另一端的团队就会为集成服务器创建一个由于

而失败的构建
  

无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。

我们使用基于代码的迁移。

为了简化故障排除,我正在寻找一种方法来显示应用自动迁移的方法,允许从代码中自动迁移。解决问题的集成服务器上不存在编写新迁移脚本的环境。

尝试解决方案

我尝试使用DbMigrator as outlined here,但这似乎只展示了尚未应用的基于代码的迁移。

问题

是否有基于代码的方法可以显示要应用的更改,是否启用了自动迁移?

1 个答案:

答案 0 :(得分:1)

这是一个适合我的解决方案

public string GetAutomaticMigrationsScript<T>() where T : DbMigrationsConfiguration, new()
{
    var configuration = new T();
    configuration.AutomaticMigrationDataLossAllowed = true;
    configuration.AutomaticMigrationsEnabled = true;
    var migrator = new DbMigrator(configuration);
    var scriptor = new MigratorScriptingDecorator(migrator);
    var script = scriptor.ScriptUpdate(sourceMigration: null, targetMigration: null);

    return script;
}

用法:

Console.WriteLine(GetAutomaticMigrationsScript<MyConfiguration>());

变量script将包含将运行以执行自动迁移的SQL脚本。此代码实际上不会执行迁移,但您可以将script的内容粘贴到SSMS中并在那里运行迁移。