[TestFixture] public class MigrationTestHandler { private string ConnectionString { get { return ConfigurationManager.ConnectionStrings["MigrationDatabase"].ConnectionString; } }
[SetUp] public void SetUp() { var blankContext = new DbContext(ConnectionString); blankContext.Database.Delete(); blankContext.Database.Create(); }
[TearDown] public void TearDown() { var blankContext = new DbContext(ConnectionString); blankContext.Database.Delete(); }
[Test] public void CanUpgradeDatabase() { var migrator = new MigrationRunnerHandler(ConnectionString); migrator.Migrate(runner => runner.MigrateUp()); }
[Test] public void CanRollbackDatabase() { var migrator = new MigrationRunnerHandler(ConnectionString); migrator.Migrate(runner => runner.MigrateUp()); migrator.Migrate(runner => runner.Rollback(int.MaxValue)); } }
public class MigrationRunnerHandler { private readonly string _connectionString; private FluentMigrator.Runner.MigrationRunner Runner { get; set; }
public MigrationRunnerHandler(string connectionString) { _connectionString = connectionString; }
private class MigrationOptions : IMigrationProcessorOptions { public bool PreviewOnly { get; set; } public int Timeout { get; set; } public string ProviderSwitches { get; set; } }
public void Migrate(Action<IMigrationRunner> runnerAction) { var factory = new SqlServer2008ProcessorFactory(); var assembly = Assembly.GetExecutingAssembly();
var announcer = new TextWriterAnnouncer(s => Console.Write(s)); var migrationContext = new RunnerContext(announcer) { TransactionPerSession = true, }; var processor = factory.Create(_connectionString, announcer, new MigrationOptions { PreviewOnly = false, Timeout = 5 }); Runner = new FluentMigrator.Runner.MigrationRunner(assembly, migrationContext, processor);
runnerAction(Runner); } }