private void RunMigrations(MigrationPlan migrationPlan)
{
if (NoWorkToDo(migrationPlan)) {
Log.Info("No migrations to perform");
return;
}
Log.Info("Starting migrations");
Log.Info("Current version is " + migrationPlan.CurrentVersion);
Log.Info("Target version is " + migrationPlan.TargetVersion);
Log.Info(String.Format("Migrate action is: {0} from {1} to {2}",
(migrationPlan.IsUp ? "UP" : "DOWN"),
migrationPlan.CurrentVersion,
migrationPlan.TargetVersion));
foreach (var step in migrationPlan.OrderedSteps) {
var migrationInfo = step.MigrationInfo;
try {
RunMigration(step);
}
catch (NotSupportedByDialect nse) {
HandleNotSupportedByDialectException(migrationInfo, nse);
}
catch (Exception ex) {
var errorMsg = String.Format("Error running migration {0}: {1}", migrationInfo.Name, ex);
Log.Error(errorMsg);
_dataClient.RollBack();
var args = new MigrationErrorArgs(migrationInfo.Name, ex);
FireOnMigrationError(args);
if (!args.Handled) {
throw new MigrationException(errorMsg, ex);
}
}
}
Log.Info("Done. Current version: " + migrationPlan.TargetVersion);
}