数据层应用程序框架(DAC Fx)中的复杂数据迁移

lu.*_*min 5 data-migration dac data-tier-applications

我很高兴能够使用DAC Fx和声明式数据库开发.对我来说,主要的障碍是如何处理跨架构的几个不同版本的复杂数据迁移.在旧世界中,我们可以按顺序运行所有升级脚本,这可以保证在数据迁移时架构处于正确状态.当升级路径是动态的时,这是如何工作的?

例如,假设现有实例上有多个版本的架构(DACPAC1-4):

  • DACPAC1:tableA存在且具有宝贵的客户端数据
  • DACPAC2:tableA已弃用,由tableB和规范化的tableC取代; 添加新表格
    • 部署后脚本:将数据从tableA移动到新的tableB和tableC; 下降表A.
  • DACPAC3:tableC有一个新的可空列columnX
    • 部署后脚本:基于tableD填充可空列
  • DACPAC4:tableC.columnX不可为空

如果我需要能够支持将DACPAC1-3服务器升级到最新的DACPAC4,我现在必须以足够聪明的方式编写我的部署前和部署脚本,以检测目前哪个DACPAC在目标上并正确处理数据迁移按顺序排列.此外,我不能简单地重复使用我最初编写的天真的部署后脚本,因为它们依赖于模式的中间版本.

提前感谢任何建议!

小智 0

我通常做的事情如下:

  1. 创建一个包含名为 SchemaVersion 的属性的系统表。所有升级脚本都被编程为首先检查当前版本,然后决定是否执行其内容。执行后,它将 SchemaVersion 设置为脚本中存储的最新版本。

  2. 我通常还包含另一个名为 MinAppVersion 的属性(与当前架构兼容的最低版本)。当应用程序尝试连接到数据库时,它将当前程序集版本与数据库中存储的 MinAppVersion 进行比较。如果版本等于或高于 MinAppVersion,则建立连接,否则抛出异常。

我希望这有帮助。亲切的问候,