【发布时间】:2014-08-18 15:35:43
【问题描述】:
我有一个使用 EF6 Code First 的 MVC 应用程序。我想将此应用程序部署到多个数据中心。在具有迁移的部署中,我可以编写一个脚本来尽可能同时迁移它们,但如果一个数据中心速度较慢,那么由于架构不再匹配,所有调用都可能被拒绝。尝试协调的脚本也会使滚动升级变得不可能。
有没有办法让 EF 至少尝试运行查询,即使模式不匹配?我可以/应该以其他方式解决这个问题吗?
更新:
让我们看看我能不能更好地用这个词。我想在多个数据中心拥有我的 MVC 应用程序。假设我将应用单独部署到每个数据中心。
选项 1
- 部署到数据中心 A
- 代码优先迁移在集中式数据库上运行
- 对 DC A 的请求成功,但对 DC B 的请求失败
选项 2
- 部署到数据中心 A
- 不要自动运行迁移
- 对 DC A 的请求失败,对 DC B 的请求继续成功
我如何制定部署策略以确保对任一 DC 的请求都能正常工作?
顺便说一句:如果需要特定于平台的解决方案,我正在使用 Azure 网站。
【问题讨论】:
-
“在集中式数据库上运行”迁移适用于数据库,而不是应用程序实例。如果您的架构已更改,那么您需要为每个应用程序部署更新的代码,但您不必为每个应用程序运行迁移。迁移仅适用于集中式数据库。
-
另外,我相信 EF 会检查数据库版本,如果版本不同,它将失败(它在几个版本之前做过,但我知道他们已经摆脱了一些迁移元数据表)。因此,当您部署更新的实例时,您的第二个应用程序实例只会为对其发出的任何请求抛出错误,这通常非常快。您可以对此进行测试并确定确切的异常并捕获该异常并将用户发送到“站点正在更新”消息,或者如果您有该功能,请尝试将他们引导到不同的实例。
-
是的,你中了它的头。我完全可以返回错误或“站点正在更新”消息,但似乎应该有一个滚动升级的解决方案,您可以在有限数量的服务器上测试站点,然后再将其发送到其他服务器。
标签: asp.net-mvc entity-framework ef-code-first entity-framework-migrations