protected override void Dispose(bool disposing)
        {
            var connectionString = ConnectionString;
            var database         = Database;

            base.Dispose(disposing);

            var builder = new SqlConnectionStringBuilder(connectionString)
            {
                InitialCatalog = "master"
            };

            using (var db = new SqlConnection(builder.ConnectionString))
            {
                db.Open();
                try
                {
                    db.Execute($"ALTER DATABASE [{database}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
                    db.Execute($"DROP DATABASE [{database}]");
                }
                catch (SqlException e)
                {
                    Trace.TraceError(e.ToString());
                }
            }

            switch (Connection)
            {
            case SqlConnection connection when connection.DataSource != null:
                try
                {
                    File.Delete(SqlServerMigrationRunner.DatabaseFileName(database));
                }
                catch (Exception e)
                {
                    Trace.TraceError(e.ToString());
                }

                break;
            }
        }
        private static string CreateConnectionString()
        {
            var database = $"{Guid.NewGuid().ToString("N").ToUpperInvariant()}";
            var builder  =
                new SqlConnectionStringBuilder(
                    "Data Source=(localdb)\\MSSQLLocalDB;Integrated Security=true;MultipleActiveResultSets=true")
            {
                InitialCatalog = "master"
            };

            using (var connection = new SqlConnection(builder.ConnectionString))
            {
                connection.Open();

                var fileName = SqlServerMigrationRunner.DatabaseFileName(database);

                connection.Execute($"CREATE DATABASE [{database}] ON (NAME = N'{database}', FILENAME = '{fileName}')");
                connection.Execute($"ALTER DATABASE [{database}] SET READ_COMMITTED_SNAPSHOT ON;");
                connection.Execute($"ALTER DATABASE [{database}] SET ALLOW_SNAPSHOT_ISOLATION ON;");
            }

            builder.InitialCatalog = database;
            return(builder.ConnectionString);
        }