我很高兴能够使用 DAC Fx 和声明式数据库开发。对我来说,主要障碍是如何处理跨多个不同版本模式的复杂数据迁移。在旧世界中,我们可以简单地按顺序运行我们所有的升级脚本,这可以保证架构在数据迁移时处于正确的状态。当升级路径是动态的时,这是如何工作的?
例如,假设现有实例上有我的架构 (DACPAC1-4) 的多个版本:
- DACPAC1:tableA 存在并且有有价值的客户数据
- DACPAC2:不推荐使用 tableA 并由 tableB 和规范化 tableC 替换;添加新表D
- 部署后脚本:将数据从 tableA 移动到新的 tableB 和 tableC;删除表A
- DACPAC3:tableC 有一个新的可为空的 columnX
- 部署后脚本:基于 tableD 填充可为空的列
- DACPAC4:tableC.columnX 不可为空
如果我需要能够支持将 DACPAC1-3 服务器升级到最新的 DACPAC4,我现在必须以足够聪明的方式编写我的部署前和部署后脚本,以检测目标上当前是哪个 DACPAC 并正确处理数据迁移步骤顺序。此外,我不能简单地重复使用我最初编写的幼稚的部署后脚本,因为它们依赖于模式的中间版本。
提前感谢您的任何建议!