public MigrationRunner(ConnectionInfo connection, Config config) { this.connection = connection; this.force = config.Force; var migrationPath = config.MigrationPath.IsNullOrEmptyReturn(Environment.CurrentDirectory); this.migrations = GetPaths(migrationPath).Select(p => new Migration(p)).ToArray(); }
internal static List<ConnectionInfo> GetConnections(Config config) { var connections = new List<ConnectionInfo>(); connections.Add ( new ConnectionInfo("DB", config.ConnectionString, config.CommandTimeout) ); return connections; }
public static void Init() { var config = new Config { ConnectionString = Application.ConnectionString, MigrationPath = System.Web.Hosting.HostingEnvironment.MapPath("~/Migrations"), Force = true, CommandTimeout = 5 * 60 }; logger.Info("--------------------------------------------------------------------"); logger.Info("Start Migration"); logger.Info("Migration Path: " + config.MigrationPath); List<ConnectionInfo> connections = null; try { connections = MigrationRunner.GetConnections(config); foreach (var c in connections) { logger.Info("Connecting to database: " + c.Name); c.SqlConnection.Open(); var runner = new MigrationRunner(c, config); logger.Info("Running migrations"); runner.Migrate(); c.SqlConnection.Close(); logger.Info(c.Name + " is up to date"); } } catch (Exception e) { logger.Error("ERROR OCCURRED WHEN RUNNING MIGRATIONS:"); logger.Error(e); throw new ApplicationException("Failed to run migration: " + e.Message); } finally { if (connections != null) { foreach (var connection in connections) { try { connection.Dispose(); } catch { logger.Error("ERROR: Failed to close connection"); } } } } }