Example #1
0
        public static void Perform(string[] args, DatabaseConnectionProperties properties, Assembly assembly, Action <IServiceCollection> serviceHandler = null)
        {
            var parser = new Parser(settings => settings.CaseInsensitiveEnumValues = true);

            parser.ParseArguments <DatabaseMigrationToolOptions>(args)
            .WithParsed(options =>
            {
                var serviceCollection = CreateServices(properties, assembly);
                serviceHandler?.Invoke(serviceCollection);
                using var scope = serviceCollection.BuildServiceProvider(false).CreateScope();
                var service     = scope.ServiceProvider.GetRequiredService <IDatabaseMigrationService>();

                switch (options.Action)
                {
                case MigrationAction.Upgrade:
                    service.Upgrade();
                    break;

                case MigrationAction.Rollback:
                    service.DowngradeToPrevious();
                    break;

                case MigrationAction.Downgrade:
                    service.Downgrade();
                    break;

                default:
                    throw CommonExceptions.DatabaseCouldNotBeMigrated();
                }
            })
            .WithNotParsed(_ => throw CommonExceptions.DatabaseCouldNotBeMigrated());
        }