我正在玩实体框架和持续构建。到目前为止,通过使用 migrate.exe 和适当的参数,我可以毫无问题地运行迁移或一系列迁移。
但是,当我尝试让 migrate.exe 踢出脚本而不是执行迁移时,我遇到了麻烦,就像我可以通过运行得到的一样
update-database -TargetMigration TestMigration -script
从 Visual Studio 的包管理器控制台中。
目前有没有办法做到这一点?
谢谢。
我正在玩实体框架和持续构建。到目前为止,通过使用 migrate.exe 和适当的参数,我可以毫无问题地运行迁移或一系列迁移。
但是,当我尝试让 migrate.exe 踢出脚本而不是执行迁移时,我遇到了麻烦,就像我可以通过运行得到的一样
update-database -TargetMigration TestMigration -script
从 Visual Studio 的包管理器控制台中。
目前有没有办法做到这一点?
谢谢。
自 2017 年 10 月 22 日以来,您可以通过此 PR 做到这一点: https ://github.com/aspnet/EntityFramework6/commit/02ec6b8c9279f93f80eeed1234e5ce0acfce5f31
这里是实现此功能的实体框架 6.2 发行说明(请参阅“Migrate.exe 应支持 -script 选项”部分): https ://blogs.msdn.microsoft.com/dotnet/2017/10/26/entity-framework- 6-2-运行时发布/
请按照以下步骤操作:
migrate.exe yourMigrationAssembly.dll /startupConfigurationFile=”..\web.config” /scriptFile="migrationOutput.sql"
它将根据尚未应用的迁移生成文件“migrationOutput.sql”,其中包含您必须在目标环境数据库上执行的 SQL。
目前不支持。请为该问题投票:迁移:-Script for Migrate.exe
您可以编写一个简单的 c# 控制台应用程序或使用 Linqpad 之类的东西来使用 Entity Framework Infrastructure 对象生成脚本。您只需要使用 DbMigrationsConfiguration 类加载 DLL 并实例化它。这是类似于对我有用的代码:
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
const string ScriptFile = "Migration.sql";
const string ConnectionString = @"Server=.\SqlExpress;Database=...;Trusted_Connection=True;";
const bool AutomaticMigrationDataLossAllowed = false;
var targetDb = new DbConnectionInfo(ConnectionString, "System.Data.SqlClient");
var config = new MyDbMigrationsConfiguration
{
AutomaticMigrationDataLossAllowed = AutomaticMigrationDataLossAllowed,
TargetDatabase = targetDb,
};
var migrator = new DbMigrator(config);
var scripter = new MigratorScriptingDecorator(migrator);
var script = scripter.ScriptUpdate(null, null);
File.WriteAllText(ScriptFile, script);
Console.WriteLine("Migration Script Generated: " + ScriptFile);