我们有一个大型生产数据库,它使用自定义版本控制,允许在架构更改时进行无缝升级(每个更改脚本都已版本化)。一切都运作良好。
我们可以在现有数据库中并排使用数据层应用程序编程模型吗?我们想尝试DAC方法,而不用将我们的数据库转换为Data-Tier应用程序。在模式级别将数据层应用程序与数据库的其余部分隔离是理想的。我们假设我们有三种模式, dbo ,我的和 dac 。我们希望继续手动管理 dbo 和我的,并使用dacpacs自动迁移 dac 架构中的所有内容。
我们尝试了一些测试,似乎数据层应用框架不喜欢竞争 - 它检测范围之外的对象为"手动更改"并尝试在导入时删除它们。有没有办法改变这种行为?
答案 0 :(得分:0)
这里的答案是“或多或少,但有一些工作”。理想情况下,DAC框架旨在为整个数据库建模,但可以通过多种方式进行配置以克服这个问题。
一种方法是确保在任何发布配置中将“不在源中的drop对象”设置为false。这是在高级发布设置中,可以在命令行等上进行配置。这样做的缺点是当您删除dac架构中的对象时,它不会被删除
要获得更完整的解决方案,您需要使用部署参与者来过滤与“dac”以外的模式相关的任何步骤。起点是我写的DacFx tutorial中的“解决方案2:在部署时过滤”(源代码here)。这显示了如何过滤掉创建步骤 - 您实际上也希望将其扩展为删除步骤。好处是可以更好地控制并更好地匹配您的解决方案,缺点是需要编写一些自定义代码并将其包含在您的设置中。
请注意,无论您做什么,您仍会发现架构比较和其他工具显示备用架构。您可以配置模式比较以过滤掉其他模式,并将比较文件保存为这些设置以供将来使用。
此外,您需要遵守以下规则,即不从dac架构引用其他手动管理的架构。支持编写自定义代码分析规则来强制执行此操作,或者您可以通过代码审查等强制执行它。