gpt4 book ai didi

c# - SQL 管理工作室中可见的 LocalDB 连接

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:52 24 4
gpt4 key购买 nike

在我的单元测试中,我使用的是 SQL Server LocalDB 数据库。您可能会吹毛求疵地说,因为这个事实,它不是单元测试而是集成测试,您是对的,但关键是我正在使用 MSTest 框架来运行这些测试。每个测试都在复制现有数据库并在该数据库上运行他们的一个测试。

private NAMETestSystem([CallerMemberName] string testCase = null)
{
this.destinationDirectory = Path.Combine(Directory.GetCurrentDirectory(), testCase ?? "Undefined_" + Guid.NewGuid().ToString("N"));

var connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB; Integrated Security = True; AttachDbFilename ={Path.Combine(this.destinationDirectory, "NAMEIntegrationTest.mdf")}";

var entityFrameworkData = $"metadata=res://*/NAME.csdl|res://*/NAME.ssdl|res://*/NAME.msl;provider=System.Data.SqlClient;provider connection string=\"{connectionString}\"";

// [...]

Copy(SourceDirectory, this.destinationDirectory);

我的“问题”是这些副本中的每一个都会在我的 SQL Server 管理工作室中弹出。所有 100 多个或他们。我在那里不需要他们。它们不存在了。更糟糕的是,您不能批量分离...我必须按 Del+Enter 大约 150 次才能清除该窗口。

enter image description here

有没有办法让我的临时本地数据库实例出现在我的 SQL Server Management Studio 中?

也许是关闭或处理的特殊方式,我可以在连接字符串中设置一些东西?或者也许有一种方法可以在管理工作室中同时分离所有这些?

最佳答案

所以最后,我所做的以及目前运行良好的是:

    public void Dispose()
{
// disposing other stuff

// sql db
if (Directory.Exists(this.destinationDirectory))
{
DetachDatabase(this.connectionString);
Directory.Delete(this.destinationDirectory, true);
}
}

public static void DetachDatabase(string connectionString)
{
using (var connection = new SqlConnection(connectionString))
{
connection.Open();

using (var command = connection.CreateCommand())
{
var sql = "DECLARE @dbName NVARCHAR(260) = QUOTENAME(DB_NAME());\n" +
"EXEC('ALTER DATABASE ' + @dbName + ' SET OFFLINE WITH ROLLBACK IMMEDIATE;');\n" +
"EXEC('exec sp_detach_db ' + @dbName + ';');";

command.CommandText = sql;
command.ExecuteNonQuery();
}
}
}

可能不是最漂亮的解决方案,但至少它在测试数量(和数据库数量)增加的同时保持我的理智。

关于c# - SQL 管理工作室中可见的 LocalDB 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48643612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com