protected void RunMigration(DatabaseConfiguration dbConfig, TagsConfiguration tagsConfiguration) { CreateContainer(dbConfig, tagsConfiguration); LogMigrationPerform(dbConfig); CreateDatabaseIfRequired(dbConfig); if (dbConfig.MigrationDirection == MigrationDirection.Down) { if (!dbConfig.MigrationVersion.HasValue) { throw new ArgumentException("Migration down must have specified migration version"); } m_runner.MigrateDown(dbConfig.MigrationVersion.Value); } else { if (!dbConfig.MigrationVersion.HasValue) { m_runner.MigrateUp(); } else { m_runner.MigrateUp(dbConfig.MigrationVersion.Value); } } }
private string[] GetTags(DatabaseConfiguration dbConfig, TagsConfiguration tagsConfiguration) { var tagList = new List <string>(); if (!string.IsNullOrEmpty(dbConfig.DatabaseTag)) { tagList.Add($"{TagsPrefixes.DatabasePrefix}{dbConfig.DatabaseTag}"); } if (!string.IsNullOrEmpty(tagsConfiguration.EnvironmentTag)) { tagList.Add($"{TagsPrefixes.EnvironmentPrefix}{tagsConfiguration.EnvironmentTag}"); } if (!string.IsNullOrEmpty(tagsConfiguration.MigrationTypeTag)) { tagList.Add($"{TagsPrefixes.MigrationTypePrefix}{tagsConfiguration.MigrationTypeTag}"); } return(tagList.ToArray()); }
protected ServiceProvider CreateContainer(DatabaseConfiguration dbConfig, TagsConfiguration tagsConfiguration) { var pathsConfiguration = m_config.GetSection("PathsConfiguration").Get <PathConfiguration>(); var databaseCreateConfiguration = m_config.GetSection("DatabaseCreateConfiguration").Get <DatabaseCreateConfiguration>(); var serviceCollection = new ServiceCollection(); serviceCollection .AddNLog() .AddNHibernate(dbConfig) .AddSingleton(dbConfig) .AddSingleton(pathsConfiguration) .AddSingleton(databaseCreateConfiguration) .AddSingleton(typeof(DatabaseDropper)) .AddFluentMigratorCore() .AddTransient <IScriptPathResolver, ScriptPathResolver>() .AddScoped <IMigrationRunner, ConstrainedMigrationRunner>() .AddScoped <IMigrationRunnerConventions, CustomMigrationRunnerConventions>() .AddScoped <TagValidatorBase, EnvironmentTagValidator>() .AddScoped <TagValidatorBase, DatabaseTagValidator>() .AddScoped <TagValidatorBase, MigrationTypeValidator>() .AddScoped <IVersionLoader>(sp => { var options = sp.GetRequiredService <IOptions <RunnerOptions> >(); var connAccessor = sp.GetRequiredService <IConnectionStringAccessor>(); var hasConnection = !string.IsNullOrEmpty(connAccessor.ConnectionString); if (options.Value.NoConnection || !hasConnection) { return(ActivatorUtilities.CreateInstance <ConnectionlessVersionLoader>(sp)); } return(ActivatorUtilities.CreateInstance <ValidatingVersionLoader>(sp)); }) .AddLogging(lb => lb.AddDebug().AddFluentMigratorConsole()) .ConfigureRunner(builder => builder .AddSupportedDatabases(m_appConfiguration.SupportedDialects) .WithGlobalConnectionString(dbConfig.ConnectionString) .ScanIn(m_appConfiguration.MigrationAssemblies) .For.All()) .Configure <SelectingProcessorAccessorOptions>(opt => opt.ProcessorId = dbConfig.DatabaseDialect) .Configure <RunnerOptions>(opt => { opt.Tags = GetTags(dbConfig, tagsConfiguration); opt.TransactionPerSession = dbConfig.TransactionPerSession; }); var serviceProvider = serviceCollection.BuildServiceProvider(); var loggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>(); loggerFactory.AddNLog(new NLogProviderOptions { CaptureMessageTemplates = true, CaptureMessageProperties = true }); NLog.LogManager.LoadConfiguration("NLog.config"); m_databaseCreator = serviceProvider.GetRequiredService <DatabaseCreator>(); m_runner = serviceProvider.GetRequiredService <IMigrationRunner>(); m_logger = serviceProvider.GetRequiredService <ILogger <ApplicationRunnerBase> >(); return(serviceProvider); }