2

在自动数据层应用程序(DACPAC)升级中设置DacUpgradeOptions.IgnoreDataLoss属性的最佳做法是什么?在连续部署中设置DacUpgradeOptions.IgnoreDataLoss标志的最佳实践?

根据MSDN文档(link)上,如果IgnoreDataLoss,升级将继续进行,即使某些操作导致数据的丢失。如果错误,这些操作将终止升级。例如,如果当前数据库中的表格不存在于新DAC的模式中,则如果指定了True,则该表格将被删除。默认值为True

但是,在持续交付的环境中,每个数据库更改都会自动部署到管道(CI - > Test - > UI-Test)并最终到生产环境中,这似乎是一种安全措施IgnoreDataLoss错误,因为我们不希望生产数据库上发生数据丢失/漂移。如果IgnoreDataLoss错误并且开发人员提交引入数据丢失的数据库更改,则CI /测试版本将失败,这使我们能够在此更改达到产品之前捕获此数据。

尽管这种方法存在问题,因为次数据丢失是故意的。例如,我们可能需要删除一个不再使用的特定表。如果IgnoreDataLossFalse,则构建失败并且DACPAC更改从未应用,因为可能会检测到数据丢失(即使这种损失是故意的)。在这种情况下,我们希望IgnoreDataLossTrue

只是想知道最好的做法是什么,尤其是在我们连续自动部署的环境中。任何建议将不胜感激。谢谢!

回答

2

在大多数情况下,我们可以将IgnoreDataLoss设置为false。这有助于确保我们不会意外修改数据库并引入数据丢失。当我们想要删除表格时,我们可以手动删除表格(请不要使用DACPAC)。或者,我们可以暂时将IgnoreDataLoss设置为true以执行特定的升级操作。

最好的问候,

Ming Xu。