public void ExistingProjects_DowngradeScriptColumnDontExists_AddsDowngradeScriptColumn() { var upgradeEngineBuilder = DeployChanges.To .SqlDatabase(connectionString) .WithScript(new SqlScript("CreatePersonsTable", "CREATE TABLE Persons(PersonID int, LastName varchar(255), FirstName varchar(255));")) .LogToNowhere(); upgradeEngineBuilder.Build().PerformUpgrade(); var upgradeScriptProvider = new StaticScriptProvider(new List <SqlScript>() { new SqlScript("NameOfYourScript", @"CREATE TABLE [dbo].[Values]( [Id] [int] NOT NULL, [Value1] [int] NOT NULL, [Value2] [int] NULL, CONSTRAINT [PK_Values] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]") }); var downgradeScriptProvider = new StaticScriptProvider(new List <SqlScript>() { new SqlScript("NameOfYourScript", "DROP TABLE [dbo].[Values]") }); var downgradeEngineBuilder = DeployChanges.To .SqlDatabase(connectionString) .WithScripts(upgradeScriptProvider) .WithDowngradeTableProvider <SqlDowngradeEnabledTableJournal>(downgradeScriptProvider, new DefaultDowngradeScriptFinder()) .LogToNowhere(); var result = downgradeEngineBuilder.BuildWithDowngrade(true).PerformUpgrade(); //Assert Assert.AreEqual(true, result.Successful); using (var connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand("SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'SchemaVersions' AND COLUMN_NAME = 'DowngradeScript'", connection); try { connection.Open(); var executeScalar = command.ExecuteScalar(); Assert.IsNotNull(executeScalar); // If 1 the DowngradeScript cloumn persists in the DB } catch { throw; } finally { connection.Close(); } } }
public void StaticScriptProvider_SuccessfullyStoresDowngradeScripts() { var upgradeScriptProvider = new StaticScriptProvider(new List <SqlScript>() { new SqlScript("NameOfYourScript", @"CREATE TABLE [dbo].[Values]( [Id] [int] NOT NULL, [Value1] [int] NOT NULL, [Value2] [int] NULL, CONSTRAINT [PK_Values] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]") }); var downgradeScriptProvider = new StaticScriptProvider(new List <SqlScript>() { new SqlScript("NameOfYourScript", "DROP TABLE [dbo].[Values]") }); var upgradeEngineBuilder = DeployChanges.To .SqlDatabase(connectionString) .WithScripts(upgradeScriptProvider) .WithDowngradeTableProvider <SqlDowngradeEnabledTableJournal>(downgradeScriptProvider, new DefaultDowngradeScriptFinder()) .LogToNowhere(); var result = upgradeEngineBuilder.BuildWithDowngrade(true).PerformUpgrade(); //Assert Assert.AreEqual(true, result.Successful); Dictionary <string, string> executedScriptsAndDowngradeScripts = GetExecutedScriptsFromDatabase(connectionString); var upgradeScripts = upgradeScriptProvider.GetScripts(null); var downgradeScripts = downgradeScriptProvider.GetScripts(null); Assert.AreEqual(executedScriptsAndDowngradeScripts.Count, upgradeScripts.Count()); foreach (var storedDowngradeScript in executedScriptsAndDowngradeScripts.Values.Where(v => !string.IsNullOrEmpty(v))) { Assert.IsTrue(downgradeScripts.Any(script => script.Contents.Equals(storedDowngradeScript))); } }