【问题标题】:Automate EF-Migrations "Update-Database -Script"自动化 EF 迁移“更新数据库脚本”
【发布时间】:2012-12-28 19:23:27
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • “现在我需要为每次迁移生成一个 SQL 脚本,以便我可以将这组脚本传递给 DBA。” - 这并不是说这回答了您的问题,但是包含所有必要迁移的单个脚本不足以满足您的 DBA 的需求吗?
  • 不,它不会,因为我们需要支持生产系统的增量数据库更新。使用一个脚本,DBA 需要找出哪些更改适用于现有数据库。

标签: c# entity-framework powershell entity-framework-5 entity-framework-migrations


【解决方案1】:

终于找到了解决办法。我不知道的是,可以从 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() 一起,您可以完全控制生成脚本的粒度。

【讨论】:

  • 感谢您提供自动化解决方案。我将尽快将其集成到我们的 CI 中
  • 嘿伙计,感谢这里的自我回答。我的情况完全一样。
  • 非常感谢!这极大地帮助了我将一堆迁移压缩成一个平坦的“基线”以减少构建膨胀。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2013-02-04
相关资源
最近更新 更多