private async Task InitializeAsync() { if (executor != null) { return; } LoadModules(); CreateMigrationProvider(); executionOptions.EnvironmentTags = Options.EnvironmentTags?.ToArray() ?? new string[0]; executionOptions.MigrateOnlySpecifiedModules = Options.Modules?.Count() > 0 ? Options.Modules.Select(x => { string[] parts = x.Split('@', 2); if (parts.Length > 1) { return(new DatabaseMigrationSearchSpecifier(parts[0], DatabaseVersion.Parse(parts[1]))); } else { return(new DatabaseMigrationSearchSpecifier(x, null)); } }).ToArray() : null; migrationSelector = new DatabaseMigrationSelector(migrationRegistry, migrationProvider, executionOptions.MigrationSelectorOptions); Regex fileNameRegex = Options.FileNameRegex != null ? new Regex(Options.FileNameRegex, RegexOptions.Compiled | RegexOptions.IgnoreCase) : null; foreach (string path in Options.DirectoryPaths) { kernel.Bind <FileDatabaseMigrationDiscoveryPath>() .ToConstant(new FileDatabaseMigrationDiscoveryPath(path, true, fileNameRegex)); } if (!Options.DirectoryPaths.Any() && !Options.Assemblies.Any()) { Logger.Error("You have not passed any --directoryPaths nor --assemblies to load the migrations from. No migrations will be performed."); } migrationDiscoveries = new IDatabaseMigrationDiscovery[] { new FileDatabaseMigrationDiscovery(kernel.GetBindings(typeof(FileDatabaseMigrationDiscoveryPath)).Count() > 0 ? kernel.GetAll <FileDatabaseMigrationDiscoveryPath>().ToArray() : new FileDatabaseMigrationDiscoveryPath[0]), new ResourceDatabaseMigrationDiscovery(kernel.GetBindings(typeof(ResourceDatabaseMigrationDiscoveryAssembly)).Count() > 0 ? kernel.GetAll <ResourceDatabaseMigrationDiscoveryAssembly>().ToArray() : new ResourceDatabaseMigrationDiscoveryAssembly[0]) }; executor = new DatabaseMigrationExecutor(new[] { migrationProvider }, migrationRegistry, migrationDiscoveries, migrationSelector, executionOptions); }
public DatabaseMigrationExecutor(IDatabaseMigrationProvider[] migrationProviders, IDatabaseMigrationRegistry migrationRegistry, IDatabaseMigrationDiscovery[] migrationDiscoveries, IDatabaseMigrationSelector migrationSelector, IDatabaseMigrationExecutionOptions options) { this.migrationProviders = migrationProviders; this.migrationRegistry = migrationRegistry; this.migrationDiscoveries = migrationDiscoveries; this.migrationSelector = migrationSelector; this.options = options; }
public DatabaseMigrationExecutorTests() { migrationProviders = new[] { Substitute.For <IDatabaseMigrationProvider>() }; migrationProviders[0].GetProviderEnvironmentTags().Returns(new[] { "providerTag" }); migrationRegistry = Substitute.For <IDatabaseMigrationRegistry>(); migrationDiscoveries = new[] { Substitute.For <IDatabaseMigrationDiscovery>() }; migrationSelector = Substitute.For <IDatabaseMigrationSelector>(); migrationExecutionOptions = Substitute.For <IDatabaseMigrationExecutionOptions>(); migrationExecutionOptions.EnvironmentTags.Returns(new[] { "optionsTag" }); sut = new DatabaseMigrationExecutor(migrationProviders, migrationRegistry, migrationDiscoveries, migrationSelector, migrationExecutionOptions); }