【发布时间】:2017-04-12 09:23:02
【问题描述】:
我们正在部署到 MS SQL Server localdb 进行集成测试。
我们构建了一个数据库项目,并复制了生成的dacpac 文件以供 IntegrationTests 项目使用。到目前为止,我们有:
DatabaseProject.sqlproj
bin/debug/DatabaseProject.dacpac
IntegrationTests.csproj
bin/debug/DatabaseProject.dacpac
我们在 IntegrationTests 项目中有一个程序集设置,其中创建了一个新的新数据库并将dacpac 部署到localdb。在 TearDown 中,数据库被删除,因此我们有一个确定的状态进行测试。
这是部署dacpac的代码,它使用DacServices(Microsoft.SqlServer.Dac,System.Data.SqlLocalDb,System.Data.SqlClient):
public void CreateAndInitializeFromDacpac(
ISqlLocalDbInstance localDbInstance,
string databaseName,
string connectionString,
string dacpacPath)
{
using (var cx = localDbInstance.CreateConnection())
{
cx.Open();
using (var command = new SqlCommand(
string.Format("CREATE DATABASE {0}", databaseName), cx))
command.ExecuteNonQuery();
}
var svc = new DacServices(connectionString);
svc.Deploy(
DacPackage.Load(dacpacPath),
databaseName,
true
);
}
我们现在有几个数据库项目,部署每个项目大约需要 8 秒。这会增加执行测试的总时间。
是否有可能以某种方式提高dacpac 的部署性能?
【问题讨论】:
-
Visual Studio 提供了跟踪哪些语句耗时的方法,尝试对其进行微调。如果无法对其进行微调,请尝试使用并行性来并行部署多个项目跨度>
-
您真的必须在单独的步骤中创建数据库吗?在没有测试自己的情况下,
dacservices可能会将 dacpac 中的所有对象与空数据库中的对应对象进行比较。 -
@GavinCampbell,TheGamesiwar,您的两个 cmets 都很有用,让我将 4 个数据库的总时间从 25 秒减少到 4.5 秒。
标签: c# sql-server sql-server-data-tools localdb dacpac