2

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

根据 MSDN 文档(链接),如果IgnoreDataLossTrue,即使某些操作导致数据丢失,升级也会继续进行。如果为False,这些操作将终止升级。例如,如果当前数据库中的表不存在于新 DAC 的架构中,则如果指定 True,则该表将被删除。默认值为True

但是,在持续交付的环境中,每次数据库更改都会自动部署到管道(CI -> Test -> UI-Test)并最终部署到生产环境中,似乎将安全措施设置IgnoreDataLossFalse,因为我们不希望生产数据库上发生数据丢失/漂移。如果IgnoreDataLossFalse并且开发人员提交了导致数据丢失的数据库更改,则 CI/Test 构建将失败,从而使我们能够在此更改到达生产之前捕获它。

但是这种方法存在一个问题,因为有时数据丢失是故意的。例如,我们可能需要删除不再使用的特定表。如果IgnoreDataLossFalse,这将导致构建失败并且永远不会应用 DACPAC 更改,因为检测到潜在的数据丢失(即使这种丢失是故意的)。在这种情况下,我们希望IgnoreDataLossTrue

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

4

1 回答 1

1

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

最好的祝福,

明旭。

于 2012-04-30T05:12:23.650 回答