コード例 #1
0
 public DatabaseMigrationExecutionHook(IDatabaseMigrationExecutor executor,
                                       IDatabaseMigrationsConfiguration configuration, IEnvironment environment)
 {
     this.executor      = executor;
     this.configuration = configuration;
     this.environment   = environment;
 }
コード例 #2
0
ファイル: DatabaseMigrator.cs プロジェクト: ualehosaini/Revo
        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);
        }