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); }
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) { }