实体框架-在Azure上迁移-实际情况-降级数据库

时间:2019-05-31 10:48:46

标签: entity-framework azure ef-migrations

我已经想了很长时间了,幸运的是我还不需要这个答案,但是我仍然想知道最好的方法。假设我们有以下设置:

  • Web API 建立在 Microsoft Azure 上的实体框架(首先编码)之上。
  • 已启用自动迁移(自动迁移到最新版本)
  • 我们有两个广告位-生产登台(都有单独的数据库)

让我们遵循这种情况:

  1. 我们部署临时插槽的新版本(验证所有文件是否正常运行)
  2. 登台数据库自动迁移到最新版本
  3. 我们交换 登台实例到生产广告位
  4. 迁移产品数据库上运行
  5. 我们意识到-无论出于何种原因-我们都需要降级并升级到以前的版本。

好的,现在我所有的问题都来了

  1. 我们如何将数据库降级到以前的版本-(因为我认为将VS连接到生产环境并从程序包管理器控制台运行downgrade命令并不是一个好主意)。
  2. 工作流程是否如下:使用当前实例降级数据库(由于迁移不匹配,将导致Web应用短暂停机),然后将登台插槽(旧)实例交换到生产插槽?

我已经为此花了一段时间,因为我看不到任何理想的方法来实现此目的-因为在迁移不匹配时实体框架会中断。

3 个答案:

答案 0 :(得分:1)

您可以创建一个SQL脚本来降级数据库。请参阅本文的“获取SQL脚本”部分。

https://docs.microsoft.com/nb-no/ef/ef6/modeling/code-first/migrations/index#specific

在工作流程中,我们“解决”的方法是,当前版本的数据库应支持应用程序的较早版本。

仅在字段或表未用于多个版本之后,才真正删除它。这种方法有一些缺点,数据库可能变得肿且混乱。但这确实提供了能够安装较旧版本的应用程序的灵活性。

答案 1 :(得分:0)

我们在公司有类似的设置,而不是使用代码Fluent Migrator来进行代码优先的迁移。作为应用程序启动代码的一部分,它将运行所有未完成的迁移。

就像您将找到的任何解决方案一样,您将需要编写Up和Down代码,以便它知道如何进行升级和降级。

答案 2 :(得分:0)

经过与其他开发人员的讨论,我得出的结论是我们确实有两种选择:

  1. 通过Azure门户(cloud shell命令)将数据库降级为以前的迁移,将实例切换回,闭上眼睛,祈祷一切都会好起来的。
  2. Safer似乎正在发布补丁程序迁移或代码补丁程序​​并发布新版本。尤其是因为一旦您的新代码已经发布,修复它而不是恢复游戏可能会更明智。