如何为多个数据库启用迁移,但只有一个上下文?
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 表