在自动数据层应用程序(DACPAC)升级中设置DacUpgradeOptions.IgnoreDataLoss
属性的最佳做法是什么?
根据MSDN文档(link),如果IgnoreDataLoss
True ,即使某些操作导致数据丢失,升级仍将继续。如果 False ,这些操作将终止升级。例如,如果当前数据库中的表不存在于新DAC的模式中,则如果指定了True,则将删除该表。默认值为 True 。
但是,在持续交付的环境中,每个数据库更改都会自动部署到管道(CI - >测试 - > UI-Test)并最终到生产环境,这似乎是一个安全措施set IgnoreDataLoss
False ,因为我们不希望生产数据库上出现数据丢失/漂移。如果IgnoreDataLoss
False 且开发人员提交的数据库更改会导致数据丢失,则CI / Test构建将失败,从而允许我们在此更改到达生产之前捕获此内容。
这种方法存在问题,因为当数据丢失是有意的时,是次。例如,我们可能需要删除不再使用的特定表。如果IgnoreDataLoss
False ,则构建将失败,并且永远不会应用DACPAC更改,因为会检测到潜在的数据丢失(即使这种丢失是故意的)。在这种情况下,我们希望IgnoreDataLoss
为 True 。
只是想知道最佳做法是什么,特别是在我们连续自动部署的环境中。任何建议将不胜感激。谢谢!
答案 0 :(得分:1)
在大多数情况下,我们可以将IgnoreDataLoss设置为false。这有助于确保我们不会意外地修改数据库并引入数据丢失。当我们想要删除表时,我们可以手动删除表(请不要使用DACPAC)。或者,对于特定的升级操作,我们可以临时将IgnoreDataLoss设置为true。
最诚挚的问候,
徐明。