Ejemplo n.º 1
0
        public static async Task AutoMigrateMyDB(DbContext db)
        {
            EFCoreAutoMigrator dbMigrator = new EFCoreAutoMigrator(db, new Logger());

            dbMigrator.ShouldAllowDestructive(true);
            MigrationScriptExecutor migrationScriptExcutor = await dbMigrator.PrepareMigration();

            // Checking if there are migrations
            if (migrationScriptExcutor.HasMigrations())
            {
                Console.WriteLine("The program `Example` wants to run the following script on your database: ");
                Console.WriteLine("------");

                // Printing out the script to be run if they are
                Console.WriteLine(migrationScriptExcutor.GetMigrationScript());
                Console.WriteLine("------");

                Console.WriteLine("Do you want (R)un it, (S)ave the script or (C)ancel. ?");
                string userInput = Console.ReadLine();
                if (userInput.Length == 0)
                {
                    Console.WriteLine("No value entered. Exiting...");
                    Environment.Exit(0);
                }
                if (userInput[0] == 'R')
                {
                    // Migrating
                    MigrationResult result = await migrationScriptExcutor.MigrateDB();

                    if (result == MigrationResult.Migrated)
                    {
                        Console.WriteLine("Completed succesfully.");
                    }
                    else if (result == MigrationResult.Noop)
                    {
                        Console.WriteLine("Completed. There was nothing to migrate.");
                    }
                    else if (result == MigrationResult.ErrorMigrating)
                    {
                        Console.WriteLine("Error occurred whilst migrating.");
                    }
                }
                else if (userInput[0] == 'S')
                {
                    using (StreamWriter writer = new StreamWriter(Path.Join(Environment.CurrentDirectory, "ERCoreAutoMigratorGenetaedScript.sql")))
                    {
                        writer.WriteLine(migrationScriptExcutor.GetMigrationScript());
                        Console.WriteLine("Migration script saved succefully.");
                    }
                }
            }
            else
            {
                Console.WriteLine("Completed. There was nothing to migrate.");
            }
        }
 public MigrationsProvider(DBMigratorProps dbMigratorProps, MigrationScriptExecutor _migrationScriptExecutor)
 {
     dbContext               = dbMigratorProps.dbContext;
     dbServices              = dbMigratorProps.dbServices;
     migrationName           = dbMigratorProps.migrationName;
     snapshotHistoryLimit    = dbMigratorProps.snapshotHistoryLimit;
     migrationScriptExecutor = _migrationScriptExecutor;
     dbMigrateDependencies   = dbServices.GetRequiredService <MigrationsScaffolderDependencies>();
     migrationMetadata       = new AutoMigratorTable(dbMigratorProps.dbMigratorTableMetatdata);
 }
Ejemplo n.º 3
0
        public MigrationsProvider Build(DBMigratorProps dBMigratorProps, MigrationScriptExecutor migrationScriptExecutor)
        {
            string extensionMethod = $"{dBMigratorProps.dbContext.Database.ProviderName.Split('.').Last()}DBMigrations";

            List <MethodInfo> contextMigrationMethods = Utilities.Utilities.GetExtensionMethods(extensionMethod, typeof(DbContext)).ToList();

            if (contextMigrationMethods.Count() > 0)
            {
                return((MigrationsProvider)contextMigrationMethods[0].Invoke(null, new object[] { dBMigratorProps.dbContext, dBMigratorProps, migrationScriptExecutor }));
            }
            throw new InvalidOperationException($"The extension method '{extensionMethod}' for type {typeof(DbContext)} was not found");
        }
 public PostgresMigrations(DBMigratorProps dbMigratorProps, MigrationScriptExecutor migrationScriptExecutor) : base(dbMigratorProps, migrationScriptExecutor)
 {
 }
 public static MigrationsProvider PostgreSQLDBMigrations(this DbContext dbContext, DBMigratorProps dbMigratorProps, MigrationScriptExecutor migrationScriptExecutor)
 {
     return(new PostgresMigrations(dbMigratorProps, migrationScriptExecutor));
 }
 public static MigrationsProvider MySqlDBMigrations(this DbContext dbContext, DBMigratorProps dbMigratorProps, MigrationScriptExecutor migrationScriptExecutor)
 {
     return(new MySQLMigrations(dbMigratorProps, migrationScriptExecutor));
 }
 public MySQLMigrations(DBMigratorProps dbMigratorProps, MigrationScriptExecutor migrationScriptExecutor) : base(dbMigratorProps, migrationScriptExecutor)
 {
 }