如何为多个数据库启用迁移,但只有一个上下文?

Posted

技术标签:

【中文标题】如何为多个数据库启用迁移,但只有一个上下文?【英文标题】:How to enable migrations for multiple databases, but one context? 【发布时间】:2014-08-22 15:23:48 【问题描述】:

环境:

实体框架 6.1.0 .NET 4.5

您好,我已经在我的项目中启用了迁移。但我希望能够更新具有相同上下文的不同数据库。可能吗?根据我的研究,人们要么在一个数据库上寻找多个上下文,要么在多个数据库上寻找多个上下文。我需要的是多个数据库的一个上下文。 这是我的场景:

development_db
production_db

我希望能够将更改应用到我的development_db,然后在测试完所有内容后,我想为production_db 运行相同的更新数据库命令。我已经有 2 个连接字符串(用于两个数据库),但我不知道如何让它工作,因为迁移文件将是整个迁移项目的一个。

有可能吗?

谢谢。

【问题讨论】:

【参考方案1】:

我的工作方式,我在我的开发环境中配置上下文

web.config

<add name="MyContext" connectionString="Data Source=.\SQLDev2008R2;Initial Catalog=My_DEV;Persist Security Info=True;Integrated Security=SSPI;Connection Timeout=240" providerName="System.Data.SqlClient" />

然后我在发布生产版本时使用SlowCheetah 转换该连接字符串

web.Release.config

<connectionStrings>
  <add name="MyContext"
    connectionString="Data Source=(local);Initial Catalog=My_PROD;Integrated Security=True"
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>

</connectionStrings>

当应用程序在生产环境中运行时,我允许自动应用迁移。您可以使用Enable-Migrations -EnableAutomaticMigrations(加上其他适当的参数)配置此选项。

这可能不适合某些环境。如果是这种情况,在您的开发环境中运行update-database 之前,首先运行update-database -Script(使用适当的参数)。这将生成一个 SQL 脚本,当您准备好应用给定的更新时,您可以在生产数据库中运行该脚本,而不是依赖于自动迁移。

【讨论】:

现在我将采用-Script 方法,但我将研究第一种方法。感谢您的回复!

以上是关于如何为多个数据库启用迁移,但只有一个上下文?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 FrameLayout 中的多个视图制作浮动上下文菜单?

多个上下文的实体框架迁移脚本故障转移现有的 __MigrationHistory 表

无法生成显式迁移 - 具有多个上下文/配置的实体框架 6.1.3

如何为 ListBoxItems 创建动态上下文菜单?

如何为WPF网格的整行添加上下文菜单?

如何为 QtQuick 应用程序选择 OpenGL 上下文