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;
        }
Example #3
0
        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"); }
                    }
                }
            }
        }