public MigrationHelper(IConfiguration configuration) { _configuration = configuration; _tag = _configuration.GetSection("Migration")["TagName"]; _migrationContext = new BaseMigrationContext(configuration.GetConnectionString("TechtalkConn"), configuration.GetSection("Provider")["ProviderName"]); }
/// <summary> /// Create Migration service /// </summary> /// <param name="context">Migration context</param> /// <returns>ServiceProvider</returns> private ServiceProvider CreateService(BaseMigrationContext context) { var service = new ServiceCollection() .AddFluentMigratorCore() .ConfigureRunner(r => r .GetDatabase(context) .WithGlobalConnectionString(context.ConnectionString) .WithMigrationsIn(typeof(BaseMigrationContext).Assembly) .WithVersionTable(new VersionTable(_configuration)) ) //Configure to run only migrations that is marked with context tag .Configure <RunnerOptions>(opt => { opt.Tags = new[] { _tag }; }) .BuildServiceProvider(true); return(service); }
/// <summary> /// Get the correct database provider from the Migration Context /// </summary> /// <param name="runnerBuilder">IMigrationRunnerBuilder</param> /// <param name="context">BaseMigrationContext</param> /// <returns>IMigrationRunnerBuilder with correct database configured</returns> public static IMigrationRunnerBuilder GetDatabase(this IMigrationRunnerBuilder runnerBuilder, BaseMigrationContext context) { switch (context.DatabaseProvider) { case "postgresql": return(runnerBuilder.AddPostgres()); case "sqlserver": return(runnerBuilder.AddSqlServer()); case "sqlite": return(runnerBuilder.AddSQLite()); case "firebird": return(runnerBuilder.AddFirebird()); default: throw new ArgumentException("Unable to define database provider"); } }