- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一些自动化的 dacpac 部署代码,可以使用 Microsoft.SqlServer.Dac
在 C# 中正确处理 CreateNewDatabase 和直接更新数据库场景
现在,在 CreateNewDatabase 案例中,我们希望能够在禁用部署前脚本和部署后脚本的情况下运行 DacServices.Deploy()
。 IE。在这种情况下不应执行它们。
我试图在 DacDeployOptions
和 DacServices
对象中找到合适的位置,但找不到任何可以做到这一点的地方。理想情况下
问题 1:我想要像 DacDeployOptions.IgnorePreDeploymentScript = true
这样的东西,有什么方法可以在运行时实现吗?
作为替代方案,我记得前段时间看到示例代码显示如何遍历 dacpac 并在运行时创建新的 dacpac。我认为这种方法可以让我简单地创建一个新的 dacpac,我可以将其传递给 Deploy 并且排除部署前和部署后脚本。我不喜欢这个解决方案,但它可以让我实现我所需要的。
问题 2:谁能给我指出一些例子吗?
我的代码:
var dacService = new DacServices(ConstDefaultConnectionString);
using (var dacPackage = DacPackage.Load(dacPacFilePath))
{
var deployOptions = new DacDeployOptions
{
CreateNewDatabase = true,
IncludeTransactionalScripts = false
};
dacService.Deploy(dacPackage, TestDatabaseName, true, deployOptions);
}
问题是关于:Create LocalDB for testing from Visual Studio SQL project
最佳答案
为此您可以采取多种方法,这有点脑残(嘿,昨晚时钟倒退了,我什至不确定当前时间是否正确):
1) 使用相同的数据库引用创建一个引用您的主项目的空项目 - 当您在没有脚本的情况下部署时使用 IncludeCompositeObjects 部署空项目 - 部署前/后脚本仅从您部署的 dacpac 运行,而不是从任何引用的dacpacs 但显然代码和方案已部署。这是这样描述的:
2) 使用 SQLCMD 变量包装数据设置并将值传递给部署。
3) 让你的脚本检查它们是否应该设置数据,比如只在表行数为零时才插入
4) 对于引用数据使用合并脚本——我不清楚这是为了引用数据还是设置测试数据
5) 使用 .net 打包 api 从 dacpac 中删除部署前/后脚本,这向您展示了如何编写脚本,以便您应该能够执行 GetPart 而不是 WritePart:
https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs
总的来说,我猜想可能有一个更简单的解决方案——如果这是为了测试,那么也许可以将数据设置作为测试设置的一部分?如果您正在进行单元测试,tSQLt 可以通过使用 FakeTable 帮助您避免这一切。
希望对您有所帮助:)
埃德
关于c# - 如何在 DacServices.Deploy() 中禁用部署前和部署后脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43022266/
我是一名优秀的程序员,十分优秀!