/// <summary> /// If EF migrations need to be done, does MF Migrations on the database /// </summary> /// <returns>True if at least one migration was run</returns> public static bool MigrateDatabase(bool hasPendingEFMigrations) { if (!hasPendingEFMigrations) { return(false); } // get the pendingmigrations sorted by name (in the order that they run), then run to the latest migration var migrator = new System.Data.Entity.Migrations.DbMigrator(new Rock.Migrations.Configuration()); var pendingMigrations = migrator.GetPendingMigrations().OrderBy(a => a); // double check if there are migrations to run if (pendingMigrations.Any()) { LogStartupMessage("Migrating Database..."); var lastMigration = pendingMigrations.Last(); // create a logger, but don't enable any of the logs var migrationLogger = new Rock.Migrations.RockMigrationsLogger() { LogVerbose = false, LogInfo = false, LogWarning = false }; var migratorLoggingDecorator = new MigratorLoggingDecorator(migrator, migrationLogger); // NOTE: we need to specify the last migration vs null so it won't detect/complain about pending changes migratorLoggingDecorator.Update(lastMigration); return(true); } return(false); }
private static void Update(MigratorLoggingDecorator logger) { var last = logger.GetDatabaseMigrations().OrderByDescending(m => m).FirstOrDefault(); try { if (File.Exists(NOME_ARQUIVO_LAST_MIGRATION_VALIDA)) { File.Delete(NOME_ARQUIVO_LAST_MIGRATION_VALIDA); } logger.Update(); File.WriteAllText(NOME_ARQUIVO_LAST_MIGRATION_VALIDA, last); } catch (SqlException ex) { // LogManagerComum.LogarErro(ex, mensagem: "DEPLOY PGD -> UPDATE DATABASE"); Console.WriteLine("Erro ao executar Update Database: " + ex.Message); try { logger.Configuration.AutomaticMigrationDataLossAllowed = true; logger.Update(last); logger.Configuration.AutomaticMigrationDataLossAllowed = false; } catch (SqlException ex2) { // LogManagerComum.LogarErro(ex2, mensagem: "DEPLOY PGD -> UPDATE DATABASE -> *** ATENCAO *** PROBLEMAS NO ROLLBACK!!!!!"); } Environment.ExitCode = -1; } }
public static void DoDbUpdate() { DbMigrator migrator = new DbMigrator(new Configuration()); MigratorLoggingDecorator logger = new MigratorLoggingDecorator(migrator, new MigrationsLoggerImpl()); logger.Update(); }
public void Can_log_provider_execution_warnings() { ResetDatabase(); var migrator = CreateMigrator <ShopContext_v1>(); migrator.Update(); var mockLogger = new Mock <MigrationsLogger>(); migrator = CreateMigrator <ShopContext_v1>(new WarningMigration()); var migratorLoggingDecorator = new MigratorLoggingDecorator( migrator, mockLogger.Object); migratorLoggingDecorator.Update(); mockLogger .Verify( ml => ml.Warning( "Warning! The maximum key length is 900 bytes. The index 'PK_PkTooLong' has maximum length of 902 bytes. For some combination of large values, the insert/update operation will fail."), Times.Once()); }
public void ExecuteMigrationCommand() { var config = new Configuration(); var migrator = new DbMigrator(config); var decorator = new MigratorLoggingDecorator(migrator, new MyMigrationsLogger()); decorator.Update(); }
public DotNetAppSqlDbMigrator(MigrationsLogger logger) { var configuration = new Configuration() { ContextKey = "DotNetAppSqlDb.DataAccess.Migrations.Configuration" }; _migrator = new MigratorLoggingDecorator(new DbMigrator(configuration), logger); }
private static void Migrate(Options options) { var configuration = new Configuration(); configuration.TargetDatabase = new DbConnectionInfo( options.ConnectionString, "System.Data.SqlClient"); var migrator = new DbMigrator(configuration); //migrator.Update(); MigratorLoggingDecorator logger = new MigratorLoggingDecorator(migrator, new MigrationLogger()); logger.Update(); }
private static void MigrateTenantDatabase(MigratorTenantInfo t) { var dbMigrator = new MigratorLoggingDecorator( new DbMigrator(new Configuration { TargetDatabase = new DbConnectionInfo(t.ConnectionString, "System.Data.SqlClient") }), new EfLogger(t) ); try { dbMigrator.Update(); } catch (Exception e) { Log.Error(e, $"Error executing migrations for {t.Name}"); throw; } }
static void Main(string[] args) { var configuration = new PGD.DatabaseUpdate.Migrations.Configuration(); configuration.TargetDatabase = new DbConnectionInfo(ConfigurationManager.ConnectionStrings["PGDConnectionString"].ConnectionString, "System.Data.SqlClient"); var migrator = new DbMigrator(configuration); MigratorLoggingDecorator logger = new MigratorLoggingDecorator(migrator, new ConsoleLoggerDecoratorCGU()); if (args.Any() && args[0] == "rollback") { RollBack(logger); } else { Update(logger); } }
public void Can_log_provider_execution_warnings() { ResetDatabase(); var migrator = CreateMigrator <ShopContext_v1>(); migrator.Update(); var mockLogger = new Mock <MigrationsLogger>(); migrator = CreateMigrator <ShopContext_v1>(new WarningMigration()); var migratorLoggingDecorator = new MigratorLoggingDecorator( migrator, mockLogger.Object); migratorLoggingDecorator.Update(); // Not checking actual string anymore since it changes based on version of SqlClient used mockLogger.Verify(ml => ml.Warning(It.IsAny <string>()), Times.Once()); }
internal override void DoWork() { logger.LogInformation("Create migration"); var connectionString = configuration.GetConnectionString("DefaultConnection"); //TODO mask connection string from logs; //logger.LogInformation("Discovered connection string {connectionString}", connectionString); var migrator = new MigratorLoggingDecorator(new DbMigrator(new JoinMigrationsConfig(connectionString)), new MigrationsLoggerILoggerAdapter(logger)); logger.LogInformation("Migrator created"); logger.LogInformation("Start migration"); logger.LogInformation("Last local migration {lastLocal}", migrator.GetLocalMigrations().OrderBy(x => x).LastOrDefault()); logger.LogInformation("Last DB migration {lastDb}", migrator.GetDatabaseMigrations().OrderBy(x => x).LastOrDefault()); var pending = migrator.GetPendingMigrations(); logger.LogInformation("Pending migrations {pending}", string.Join("\n", pending)); migrator.Update(); logger.LogInformation("Migration completed"); }
private static void RollBack(MigratorLoggingDecorator logger) { try { if (File.Exists(NOME_ARQUIVO_LAST_MIGRATION_VALIDA)) { var last = File.ReadAllText(NOME_ARQUIVO_LAST_MIGRATION_VALIDA); // LogManagerComum.LogarInfo(mensagem: $"DEPLOY PGD -> UPDATE DATABASE - EXECUTANDO ROLLBACK PARA -> {last}"); logger.Configuration.AutomaticMigrationDataLossAllowed = true; logger.Update(last); logger.Configuration.AutomaticMigrationDataLossAllowed = false; File.Delete(NOME_ARQUIVO_LAST_MIGRATION_VALIDA); // LogManagerComum.LogarInfo(mensagem: "DEPLOY PGD -> UPDATE DATABASE - ROLLBACK EXECUTADO COM SUCESSO"); } } catch (SqlException ex) { // LogManagerComum.LogarErro(ex, mensagem: "DEPLOY PGD -> UPDATE DATABASE -> *** ATENCAO *** PROBLEMAS NO ROLLBACK!!!!!"); Environment.ExitCode = -1; } }