24

我正在使用 EF 迁移来跟踪对我们的 EF 代码优先数据库模型的更改。现在我需要为每次迁移生成一个 SQL 脚本,以便我可以将该组脚本传递给 DBA。

我能够生成 SQL 脚本Update-Database -Script ...

但是,我想自动化这个。我希望 -Script 开关能够接受一个参数,该参数指定将 SQL 写入何处,但事实并非如此。此外,输出重定向不起作用,因为 SQL 脚本不是写入 STDOUT,而是写入临时文件。我看不到从脚本中获取该临时文件的方法。

任何想法如何自动化迁移 - > SQL 脚本生成?也许有一些我不知道的神奇的powershell技巧?

编辑:顺便说一句,使用 migrate.exe 或任何其他“迁移感知”方法不是一个选项,交付 SQL 脚本是必须的。

4

1 回答 1

32

最后我找到了解决方案。我不知道的是,可以从 C# 代码生成 SQL 脚本,如下所示:

using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;

var migrator = new DbMigrator(new Configuration());
var scriptor = new MigratorScriptingDecorator(migrator);
var sql = scriptor.ScriptUpdate("Name-Of-Source-Migration", "Name-Of-Target-Migration");

migrator.GetLocalMigrations()您一起完全控制生成脚本的粒度。

于 2013-01-15T14:01:32.393 回答