SQL management studio 中可见的 LocalDB 连接

LocalDB connections visible in SQL management studio

在我的单元测试中,我使用的是 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);

我的 "problem" 是这些副本中的每一个都会在我的 SQL 服务器管理工​​作室中弹出。所有 100 多个或他们。我在那里不需要他们。它们不存在了。更糟糕的是,你不能批量分离...我必须按 Del+Enter 大约 150 次才能清除 window 起来。

有没有办法让我的临时本地数据库实例出现在我的SQL服务器管理工​​作室中?

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

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

    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();
            }
        }
    }

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