public static void RunMigrations(string connectionString, string migration) { // var announcer = new NullAnnouncer(); var announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s)); var assembly = Assembly.GetExecutingAssembly(); var migrationContext = new RunnerContext(announcer) { Namespace = "Azimuth.Migrations", WorkingDirectory = "Migrations" }; var options = new MigrationOptions { PreviewOnly = false, Timeout = 60 }; var factory = new FluentMigrator.Runner.Processors.SqlServer.SqlServer2012ProcessorFactory(); var processor = factory.Create(connectionString, announcer, options); var runner = new MigrationRunner(assembly, migrationContext, processor); switch (migration) { case "Run migrations": runner.MigrateUp(true); break; case "Drop all tables": runner.RollbackToVersion(201408091845); runner.Rollback(1); break; } }
public static void MigrateDown(string connectionString, long version, Stream stream, bool previewOnly) { if (version == 0) { Console.WriteLine(string.Format("Purging Database")); Honcho.Migrations.DatabasePurge.Migrate.Execute(connectionString); Console.WriteLine(string.Format("Database Purge Complete")); } else { Console.WriteLine(string.Format("Executing Migration Rollback Scripts.")); using (var connection = new SqlConnection(connectionString)) { IAnnouncer announcer = new NullAnnouncer(); // TextWriterAnnouncer(Console.Out); var processorOptions = new ProcessorOptions { PreviewOnly = previewOnly }; if (stream != null) { announcer = new TextWriterAnnouncer(new StreamWriter(stream)); } var runnerContext = new RunnerContext(announcer); var processor = new SqlServerProcessor(connection, new SqlServer2008Generator(), announcer, processorOptions); var runner = new MigrationRunner(Assembly.GetAssembly(typeof (Runner)), runnerContext, processor); runner.RollbackToVersion(version); } Console.WriteLine(string.Format("Migration Rollback Script Execution Complete")); } }
public void MigrateUpWithTaggedMigrationsShouldOnlyApplyMatchedMigrations() { ExecuteWithSupportedProcessors(processor => { var assembly = typeof(TenantATable).Assembly; var runnerContext = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = typeof(TenantATable).Namespace, Tags = new[] { "TenantA" } }; var runner = new MigrationRunner(assembly, runnerContext, processor); try { runner.MigrateUp(false); processor.TableExists(null, "TenantATable").ShouldBeTrue(); processor.TableExists(null, "NormalTable").ShouldBeTrue(); processor.TableExists(null, "TenantBTable").ShouldBeFalse(); processor.TableExists(null, "TenantAandBTable").ShouldBeTrue(); } finally { runner.RollbackToVersion(0); } }); }
public void ValidateVersionOrderShouldThrowExceptionIfUnappliedMigrationVersionIsLessThanLatestAppliedMigration() { // Using SqlServer instead of SqlLite as versions not deleted from VersionInfo table when using Sqlite. var excludedProcessors = new[] { typeof(SqliteProcessor), typeof(MySqlProcessor), typeof(PostgresProcessor) }; var assembly = typeof(User).Assembly; var runnerContext1 = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = typeof(Migrations.Interleaved.Pass2.User).Namespace }; var runnerContext2 = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = typeof(Migrations.Interleaved.Pass3.User).Namespace }; VersionOrderInvalidException caughtException = null; try { ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext1, processor); migrationRunner.MigrateUp(); }, false, excludedProcessors); ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext2, processor); migrationRunner.ValidateVersionOrder(); }, false, excludedProcessors); } catch (VersionOrderInvalidException ex) { caughtException = ex; } finally { ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext2, processor); migrationRunner.RollbackToVersion(0); }, true, excludedProcessors); } caughtException.ShouldNotBeNull(); caughtException.InvalidMigrations.Count().ShouldBe(1); var keyValuePair = caughtException.InvalidMigrations.First(); keyValuePair.Key.ShouldBe(200909060935); keyValuePair.Value.Migration.ShouldBeOfType<UserEmail>(); }
public void ValidateVersionOrderShouldDoNothingIfUnappliedMigrationVersionIsGreaterThanLatestAppliedMigration() { // Using SqlServer instead of SqlLite as versions not deleted from VersionInfo table when using Sqlite. var excludedProcessors = new[] { typeof(SqliteProcessor), typeof(MySqlProcessor), typeof(PostgresProcessor) }; var assembly = typeof(User).Assembly; var runnerContext1 = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = typeof(Migrations.Interleaved.Pass2.User).Namespace }; var runnerContext2 = new RunnerContext(new TextWriterAnnouncer(System.Console.Out)) { Namespace = typeof(Migrations.Interleaved.Pass3.User).Namespace }; try { ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext1, processor); migrationRunner.MigrateUp(3); }, false, excludedProcessors); ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext2, processor); Assert.DoesNotThrow(migrationRunner.ValidateVersionOrder); }, false, excludedProcessors); } finally { ExecuteWithSupportedProcessors(processor => { var migrationRunner = new MigrationRunner(assembly, runnerContext2, processor); migrationRunner.RollbackToVersion(0); }, true, excludedProcessors); } }