示例#1
0
        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;
 }
示例#3
0
        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);
        }