/// <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);
        }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        public static void DoDbUpdate()
        {
            DbMigrator migrator             = new DbMigrator(new Configuration());
            MigratorLoggingDecorator logger = new MigratorLoggingDecorator(migrator, new MigrationsLoggerImpl());

            logger.Update();
        }
Beispiel #4
0
        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());
        }
Beispiel #5
0
        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);
        }
Beispiel #7
0
        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;
            }
        }
Beispiel #9
0
        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());
        }
Beispiel #11
0
        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");
        }
Beispiel #12
0
        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;
            }
        }