【问题标题】:Migrate different Databases at runtime在运行时迁移不同的数据库
【发布时间】:2014-06-09 14:08:13
【问题描述】:

我可能在这里做错了,如果是这种情况,请指出正确的方向。

我正在编写一个迁移应用程序,我希望能够在其中键入我想在运行时使用的连接字符串,并能够更新不同的数据库(可能每个数据库都有不同的版本)。

对我来说问题是 Add-Migration 命令仅通过包管理器控制台执行,并且由于我的 app.config 下没有设置连接字符串,实体迁移怎么可能知道我的数据库是哪个版本的?

我在为某个连接字符串运行初始迁移后遇到了这个问题(它正确地创建了数据库和表),但是之后,当我尝试添加第二个迁移文件时,我收到一个错误,说还有其他正在等待迁移。

也许实体迁移不打算在包管理器控制台之外执行,或者使用动态连接字符串,但我需要确定我在做什么。

【问题讨论】:

标签: c# entity-framework ef-code-first database-migration entity-framework-migrations


【解决方案1】:

已经准备好这样的应用程序 - 浏览有关 migrate.exe 的信息:http://msdn.microsoft.com/en-us/data/jj618307.aspx

关于您的问题 - ef 识别出哪个迁移数据库非常简单。它用于数据库中的 __MigrationHistory 表。那里有已经应用了哪些迁移的信息(通过 MigrationId)。当前数据库的状态和应用给定迁移后应产生的数据库的状态与存储在迁移的 resx 文件中键“Target”下的哈希值进行比较。

【讨论】:

  • 重点是我通过Package Manager Console添加迁移文件,我的app.config下没有设置连接字符串。它无法检查表 __MigrationHistory,因为当我执行 Add-Migration 命令时应用程序未运行。我可能只是在重新发明轮子。我将检查提供的链接,然后更新答案。
  • add-migration 和 update-database 脚本总是针对某个数据库执行。
  • 应用程序不需要运行以便脚本可以检查 __MigrationHistory 表。
  • 如果有办法指定我要为其添加迁移文件的数据库,那么是的,该命令将能够检查 __MH 表。这样的事情存在吗?谢谢你的链接,顺便说一句,我在做一些决定时使用了它。
  • migrate.exe 为您提供 /connectionString 和 /connectionProviderName 等参数 - 通过将它们作为命令行参数传递,您可以引用给定的 db。或者,您可以参考存储连接字符串并传递连接字符串名称的项目 App.config 或 Web.config。要了解有关可用参数的更多信息,请使用“migration.exe /?”
猜你喜欢
  • 2016-09-19
  • 1970-01-01
  • 2018-08-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 2021-04-04
  • 1970-01-01
相关资源
最近更新 更多