EF Code First Migrations 适用于多个数据库

3
我已经基于这个解决方案使用EF 6 Code First MVC 5原型设计了一个项目:EF Code First to create multiple databases dynamically。现在我想知道迁移与多个数据库是如何协作的?是否意味着我需要为每个数据库运行Add-Migration MigrationsName命令?

所有数据库的版本都会一直保持相同吗? - Yuliam Chandra
如果您指的是相同的模式,那是的。 - WPalombini
我的意思是,一个数据库可以比其他数据库有更新的版本,例如,您只需添加“代码”列,它是否需要应用于所有数据库,还是仅适用于特定的数据库? - Yuliam Chandra
对于所有人来说,它们都应该是相同的,由同一个应用程序/项目共享。 - WPalombini
1个回答

2

您刚刚确认所有数据库需要同时升级,然后只需使用一个数据库添加迁移,然后将其更新到所有数据库即可。

您可以基于配置中的连接字符串名称指定连接字符串名称参数。

<connectionStrings>
    <add name="CompanyABC"
         connectionString="Data Source=.; Initial Catalog=CompanyABC; Integrated Security = true;" 
         providerName="System.Data.SqlClient" />
    <add name="CompanyDEF"
         connectionString="Data Source=.; Initial Catalog=CompanyDEF; Integrated Security = true;"
         providerName="System.Data.SqlClient" />
    <add name="CompanyXYZ"
         connectionString="Data Source=.; Initial Catalog=CompanyXYZ; Integrated Security = true;"
         providerName="System.Data.SqlClient" />
</connectionStrings>

迁移

PM> Enable-Migrations -ConnectionStringName CompanyABC
PM> Add-Migration UpgradeToVersionX -ConnectionStringName CompanyABC
PM> Update-Database -ConnectionStringName CompanyABC
PM> Update-Database -ConnectionStringName CompanyDEF
PM> Update-Database -ConnectionStringName CompanyXYZ

在运行时执行迁移

Database.SetInitializer<AppContext>(
   new MigrateDatabaseToLatestVersion<AppContext, Configuration>());

谢谢Yuliam,我忘了提到我将为每个新客户拥有一个新的数据库。今天可能有10个,明天可能有10000个,所以我需要一种自动化的方式来使用代码优先。 - WPalombini
只要将连接字符串作为新数据库传递,这仍然有效,迁移文件夹将包含从初始数据库到最新版本的顺序升级,您只需要将其执行到特定的数据库即可。 - Yuliam Chandra
但这并不需要将所有现有的数据库作为连接字符串放在Web配置文件中,我如何控制它呢?我可以每小时创建一个新的数据库。此外,我需要手动运行此Update-Database -ConnectionStringName CompanyABC吗?这可能是Company1 〜 Company10000。我不明白这个过程如何自动运行。 - WPalombini
您可以传递连接字符串值,-ConnectionString "Data Source=.; Initial Catalog=Company1000; Integrated Security=true" -ConnectionProviderName "System.Data.SqlClient" - Yuliam Chandra
这听起来像是我需要在Web配置文件中拥有所有连接字符串?根据您之前针对其他问题的建议,我想在运行时设置连接字符串。 - WPalombini
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接