private IEnumerable <IExecutable> ReCreateDatabaseProcess(BasicScope scope, DatabaseDefinition definition) { yield return(new CustomAction(scope.Topic, nameof(ReCreateDatabaseProcess)) { Then = proc => { System.Data.SqlClient.SqlConnection.ClearAllPools(); proc.Context.Log(LogSeverity.Information, proc, "opening connection to {DatabaseName}", "master"); using var connection = DbProviderFactories.GetFactory(TestConnectionString.ProviderName).CreateConnection(); connection.ConnectionString = "Data Source=(local);Initial Catalog=\"master\";Integrated Security=SSPI;Connection Timeout=5"; connection.Open(); try { proc.Context.Log(LogSeverity.Information, proc, "dropping {DatabaseName}", DatabaseName); using var dropCommand = connection.CreateCommand(); dropCommand.CommandText = "ALTER DATABASE [" + DatabaseName + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE IF EXISTS [" + DatabaseName + "]"; dropCommand.ExecuteNonQuery(); } catch (Exception) { } proc.Context.Log(LogSeverity.Information, proc, "creating {DatabaseName}", DatabaseName); using var createCommand = connection.CreateCommand(); createCommand.CommandText = "CREATE DATABASE [" + DatabaseName + "];"; createCommand.ExecuteNonQuery(); var dbToolsContext = new Context() { Settings = Helper.GetDefaultSettings(MsSqlVersion.MsSql2016), Logger = new DbTools.Common.Logger.Logger(), }; var generator = new MsSql2016Generator(dbToolsContext); var executer = new MsSql2016Executer(TestConnectionString, generator); var creator = new DatabaseCreator(definition, executer); creator.CreateTables(); } });