背景
我们在地理位置分散的团队中工作。每隔一段时间,世界另一端的团队就会为集成服务器创建一个由于
而失败的构建无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。
我们使用基于代码的迁移。
为了简化故障排除,我正在寻找一种方法来显示应用自动迁移的方法,允许从代码中自动迁移。解决问题的集成服务器上不存在编写新迁移脚本的环境。
尝试解决方案
我尝试使用DbMigrator as outlined here,但这似乎只展示了尚未应用的基于代码的迁移。
问题
是否有基于代码的方法可以显示要应用的更改,是否启用了自动迁移?
答案 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中并在那里运行迁移。