数据层应用程序可以与手动管理的数据库共存吗?

时间:2014-04-07 23:52:51

标签: sql-server data-tier-applications dacpac

我们有一个大型生产数据库,它使用自定义版本控制,允许在架构更改时进行无缝升​​级(每个更改脚本都已版本化)。一切都运作良好。

我们可以在现有数据库中并排使用数据层应用程序编程模型吗?我们想尝试DAC方法,而不用将我们的数据库转换为Data-Tier应用程序。在模式级别将数据层应用程序与数据库的其余部分隔离是理想的。我们假设我们有三种模式, dbo 我的 dac 。我们希望继续手动管理 dbo 我的,并使用dacpacs自动迁移 dac 架构中的所有内容。

我们尝试了一些测试,似乎数据层应用框架不喜欢竞争 - 它检测范围之外的对象为"手动更改"并尝试在导入时删除它们。有没有办法改变这种行为?

1 个答案:

答案 0 :(得分:0)

这里的答案是“或多或少,但有一些工作”。理想情况下,DAC框架旨在为整个数据库建模,但可以通过多种方式进行配置以克服这个问题。

  • 一种方法是确保在任何发布配置中将“不在源中的drop对象”设置为false。这是在高级发布设置中,可以在命令行等上进行配置。这样做的缺点是当您删除dac架构中的对象时,它不会被删除

  • 要获得更完整的解决方案,您需要使用部署参与者来过滤与“dac”以外的模式相关的任何步骤。起点是我写的DacFx tutorial中的“解决方案2:在部署时过滤”(源代码here)。这显示了如何过滤掉创建步骤 - 您实际上也希望将其扩展为删除步骤。好处是可以更好地控制并更好地匹配您的解决方案,缺点是需要编写一些自定义代码并将其包含在您的设置中。

请注意,无论您做什么,您仍会发现架构比较和其他工具显示备用架构。您可以配置模式比较以过滤掉其他模式,并将比较文件保存为这些设置以供将来使用。

此外,您需要遵守以下规则,即不从dac架构引用其他手动管理的架构。支持编写自定义代码分析规则来强制执行此操作,或者您可以通过代码审查等强制执行它。