使用visual studio ssdt为不同的发布配置文件部署不同的种子数据?

Dib*_*Dib 6 database-project visual-studio seeding publish-profiles sql-server-data-tools

是否可以使用visual studio Sql Server数据工具数据库项目为不同的发布配置文件部署不同的种子数据集?

我们知道您可以使用部署后脚本部署种子数据.我们知道您可以使用发布配置文件工具部署到不同的环境.我们不知道的是如何将不同的种子数据部署到不同的环境中.

我们为什么要这样做?

  • 我们希望能够这样做,因此我们可以使用一小组明确的种子数据进行单元测试.
  • 我们需要更广泛的数据集部署到测试团队的环境中,以便测试团队针对整个应用程序进行测试
  • 我们需要一组特定的种子数据用于预生产环境.

Ed *_*ott 8

有几种方法可以实现这一点,第一种方法是检查后部署脚本中的环境,例如..

if @@servername = 'dev_server'
begin
   insert data here
end
Run Code Online (Sandbox Code Playgroud)

稍微更简洁的版本是为每个环境提供不同的脚本文件,并通过:r import sqlcmd脚本导入它们,以便您可以:

  • PostDeploy.sql
  • DevServer.sql
  • QAServer.sql

然后

if @@servername = 'dev_server'
begin
   :r DevServer.sql
end
if @@servername = 'qa_server'
begin
   :r QAServer.sql
end
Run Code Online (Sandbox Code Playgroud)

您需要确保.sql文件的路径是正确的,然后使用dacpac复制它们.

您不必使用@@ servername就可以使用sqlcmd变量并将它们传递给每个环境,这些环境再次比硬编码的服务器名称更清晰.

第二种方法是使dacpac情绪化以改变post delpoy脚本与您的环境特定的脚本,这是我的首选,并且作为CI构建的一部分最好,我的过程是:

  1. 办理登机手续的变更
  2. Build Server构建dacpac
  3. Build需要dacpac,复制到dev,qa,prod等env文件夹
  4. Build使用env特定脚本替换每个中的post-deploy脚本

我调用脚本PostDeploy.dev.sql,PostDeploy.Qa.sql等,并将Build操作设置为"None",或者将它们添加为"Script,Not in Build".

要替换部署后的脚本,您只需要使用.net Packaging API,或者对于一些示例,请查看我的Dir2Dac演示,该演示可以执行以下操作:

https://github.com/GoEddie/Dir2Dac

进一步来说:

https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs

var part = package.CreatePart(new Uri("/postdeploy.sql", UriKind.Relative), "text/plain");

     using (var reader = new StreamReader(_postDeployScript))
     {
                reader.BaseStream.CopyTo(part.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite));
     }
Run Code Online (Sandbox Code Playgroud)