コード例 #1
0
 private static void SetupMigrateRunner(Core.MigrationRunner runner)
 {
     runner.SetOnMigrationError((ctx) =>
     {
         output.Info("Migration error!"); Console.WriteLine(ctx.Exception); ctx.Decision = Core.OnMigrationErrorDecision.Stop;
     });
     runner.SetOnCompletingTransaction((ctx) =>
     {
         ctx.Decision = ctx.HasErrors ? Core.OnCompletingTransactionDecision.Rollback : Core.OnCompletingTransactionDecision.Commit;
     });
 }
コード例 #2
0
        private static void SetupDynamicRunner(Core.MigrationRunner runner)
        {
            runner.SetOnCompletingTransaction((context) =>
            {
                output.Info("You are about to complete the migration process. What would you like to do?");
                DbMigrator.Core.OnCompletingTransactionDecision?decision = null;
                while (decision == null)
                {
                    decision = TryReadEnum <DbMigrator.Core.OnCompletingTransactionDecision>();
                }
                context.Decision = decision.Value;
            });

            runner.SetOnMigrating((context) =>
            {
                output.Info(string.Format("Current Migration: {0}", context.Migration.Identifier));

                DbMigrator.Core.OnMigratingDecision?decision = null;
                while (decision == null)
                {
                    decision = TryReadEnum <DbMigrator.Core.OnMigratingDecision>();
                }
                context.Decision = decision.Value;
            });

            runner.SetOnMigrationError((context) =>
            {
                output.Info(context.Exception.ToString());
                output.Info("An error has ocurred. What would you like to do?");
                DbMigrator.Core.OnMigrationErrorDecision?decision = null;
                while (decision == null)
                {
                    decision = TryReadEnum <DbMigrator.Core.OnMigrationErrorDecision>();
                }
                context.Decision = decision.Value;
            });
        }
コード例 #3
0
        private static void Migrate(MigrateOptions opts)
        {
            Core.DataAccess.IDataProvider dataProvider = null;

            switch (opts.Provider.ToLower())
            {
            case "mssql":
                dataProvider = new Core.DataAccess.MSSqlDataProvider(opts.ConnectionString);
                break;

            case "mysql":
                dataProvider = new Core.DataAccess.MySqlDataProvider(opts.ConnectionString);
                break;

            default:
                throw new ArgumentException("Invalid provider. Only mssql and mysql are currently supported.");
            }


            if (string.IsNullOrWhiteSpace(opts.ScriptsRootPath))
            {
                opts.ScriptsRootPath = new FileInfo(opts.ScriptsMapPath).Directory.ToString();
            }

            Core.MigrationRunner runner = new Core.MigrationRunner(
                dataProvider,
                new Core.JsonMigrationMapProvider(opts.ScriptsMapPath, opts.ScriptsRootPath),
                opts.Identifier
                );

            if (opts.Mode != null)
            {
                opts.Mode = opts.Mode.ToLowerInvariant().Trim();
            }
            if (opts.Mode == "migrate")
            {
                SetupMigrateRunner(runner);
            }
            else if (opts.Mode == "test")
            {
                SetupTestRunner(runner);
            }
            else if (opts.Mode == "interactive")
            {
                SetupDynamicRunner(runner);
            }
            else
            {
                throw new ArgumentException("Invalid migration mode.");
            }

            runner.SetOutputHandler(output);

            runner.AddFilter(new Core.MigrationFilter.RootMigrationFilter(dataProvider, opts.Identifier));

            if (!string.IsNullOrWhiteSpace(opts.TrimExpression))
            {
                runner.AddFilter(new Core.MigrationFilter.FlagMigrationFilter(new Core.Util.FlagFilter(opts.TrimExpression)));
            }

            if (!string.IsNullOrWhiteSpace(opts.FirstNode))
            {
                runner.AddFilter(new Core.MigrationFilter.FirstNodeMigrationFilter(opts.FirstNode));
            }

            if (!string.IsNullOrWhiteSpace(opts.LastNode))
            {
                runner.AddFilter(new Core.MigrationFilter.LastNodeMigrationFilter(opts.LastNode));
            }

            runner.Migrate();
        }