10

我有一个带有 *.sqlproj 项目的 VS2013 解决方案,其中包含特定于此解决方案的对象。问题是这对于其他项目来说也是常见的数据库。

我的问题是自动将我的架构中的更改部署到数据库而不影响其他对象。默认情况下,DACPAC 会更新我不需要的整个数据库。

我试图编写部署贡献者http://msdn.microsoft.com/en-us/library/dn268597(v=vs.103).aspx但似乎没有办法将它放在解决方案文件夹中,因为它必须放在 SQL Server 的 Program Files 子文件夹中。

我使用 Bamboo 创建部署包,应用程序托管在带有 Azure SQL 数据库的 Microsoft Azure 上。

有什么方法可以使用 DACPAC 或其他自动方式仅在我的模式中部署数据库更改?

4

2 回答 2

6

您的两个选项如下:

  1. 将 SqlPackage.exe 和其他 DAC DLL 复制到解决方案中的文件夹,或由部署团队控制的文件夹。还将您的贡献者 DLL 复制到同一文件夹中。然后确保在部署时使用该位置的 SqlPackage.exe。由于将检查与 Microsoft.Data.Tools.Schema.Sql.dll 位于同一文件夹中的任何 DLL 的扩展名,因此您可以使用此方法在部署期间包含您的贡献者,而无需安装到系统范围的位置。

  2. 从您的 dacpac 中过滤掉与其他模式相关的对象,然后使用 DropObjectsNotInSource = false 进行部署。这不太理想,因为它不会删除您删除的对象,但好处是您可以在构建时/传递给部署团队之前执行此操作。

请注意,我编写的API 教程中涵盖了这个基本主题,在这个示例项目中提供了一些示例。听起来您已经编写了选项#1(本教程有一个简化版本,仅阻止添加,而不是更改/删除),但您可以看到它们之间的比较。示例还展示了如何使用我们的 API 发布(这直接映射到使用 SqlPackage.exe)以及如何轻松测试和验证贡献者的行为。

于 2014-05-09T17:36:48.670 回答
2

您可以使用DacpacMerge库构建部署,这会将数据库中的模型与单个模式的模型合并到一个新的 DacPac 中。这个新生成的 Dacpac 可以在不影响其他对象的情况下部署,因为它们与数据库当前定义相同。

于 2019-01-26T06:25:51.260 回答