这个问题已经在我脑海中萦绕了很长一段时间,幸运的是我还不需要这个答案,但我仍然想知道最好的方法。假设我们有以下设置:
- Web API 构建于 Microsoft Azure 上的 Entity Framework (代码优先)之上。
- 已启用自动迁移(自动迁移到最新版本)
- 我们有两个槽位 - 生产和登台(两者都有单独的数据库)
让我们看看这个场景:
- 我们部署新版本到暂存槽(验证一切正常)
- 临时数据库会自动迁移到最新版本
- 我们交换登台实例到生产槽
- 迁移在生产数据库上运行
- 我们意识到,无论出于何种原因,我们需要降级并迁移到以前的版本。
好的,现在我的所有问题都来了:
- 我们如何将数据库降级到以前的版本 - (因为我认为将 VS 连接到生产并从包管理器控制台运行降级命令不是一个好主意)。
- 工作流程是否如下:使用当前实例降级数据库(这将导致网络应用短暂停机,因为迁移不匹配),然后将暂存槽(旧)实例交换到生产槽?
我对此已经摸不着头脑有一段时间了,因为我看不到任何理想的方法来做到这一点 - 因为当迁移不匹配时 Entity Framework 就会中断。
最佳答案
您可以创建一个 SQL 脚本来降级数据库。请参阅本文的“获取 SQL 脚本”部分。
https://learn.microsoft.com/nb-no/ef/ef6/modeling/code-first/migrations/index#specific
在工作流程上,我们“解决”这个问题的方法是当前版本的数据库应该支持旧版本的应用程序。
某个字段或表只有在多个版本都没有使用过之后,才算真正被删除。这种方法也有缺点,数据库可能会变得臃肿且困惑。但它确实提供了能够安装旧版本应用程序的灵 active 。
关于entity-framework - Entity Framework - Azure 上的迁移 - 现实场景 - 降级数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56393669/