private static void DoMigrate(
bool naive,
ConnectionStringSettings connectionStringSettings,
DashingSettings dashingSettings,
ReverseEngineerSettings reverseEngineerSettings) {
DisplayMigrationHeader(naive, dashingSettings);
// fetch the to state
var config = (IConfiguration)configObject;
IEnumerable<string> warnings, errors;
var script = GenerateMigrationScript(connectionStringSettings, reverseEngineerSettings, config, naive, out warnings, out errors);
if (DisplayMigrationWarningsAndErrors(errors, warnings)) {
using (Color(ConsoleColor.Red)) {
Console.WriteLine("-- Fatal errors encountered: aborting migration. Please review the output.");
}
}
else {
// migrate it
var factory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName);
using (var connection = factory.CreateConnection()) {
if (connection == null) {
throw new Exception("Could not connect to database");
}
connection.ConnectionString = connectionStringSettings.ConnectionString;
connection.Open();
if (string.IsNullOrWhiteSpace(script)) {
using (Color(ConsoleColor.Green)) {
Console.WriteLine("-- No migration script to run");
}
}
else {
using (new TimedOperation("-- Executing migration script on {0}", connection.ConnectionString)) {
using (var command = connection.CreateCommand()) {
using (Color(ConsoleColor.DarkGray)) {
Console.WriteLine();
Console.WriteLine(script);
Console.WriteLine();
}
command.CommandText = script;
command.ExecuteNonQuery();
}
}
}
// now let's call Seed
var seederConfig = config as ISeeder;
if (seederConfig != null) {
using (new TimedOperation("-- Executing seeds")) {
using (var session = config.BeginSession(connection)) {
seederConfig.Seed(session);
session.Complete();
}
}
}
}
}
}