public void GivenTheCurrentMigrations_WhenApplyingAndRevertingAndApplyingThemAgain_DatabaseIsCorrectlyMigrated()
        {
            // Arrange
            DbContextOptions <TodoDbContext> dbContextOptions = GetDbContextOptions();

            using TodoDbContext todoDbContext = new TodoDbContext(dbContextOptions);
            bool isMigrationSuccessful;

            try
            {
                todoDbContext.Database.EnsureDeleted();
                IMigrator databaseMigrator = todoDbContext.GetInfrastructure().GetRequiredService <IMigrator>();

                // Act
                databaseMigrator.Migrate();
                // Revert migrations by using a special migration identifier.
                // See more here: https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet#dotnet-ef-database-update.
                databaseMigrator.Migrate(BeforeFirstDatabaseMigration);
                databaseMigrator.Migrate();
                isMigrationSuccessful = true;
            }
            catch
            {
                isMigrationSuccessful = false;
            }

            // Assert
            isMigrationSuccessful.Should().BeTrue("migrations should work in both directions, up and down");
        }
Exemple #2
0
        public void Migrate(string destination)
        {
            var watch = Stopwatch.StartNew();

            _migrator.Migrate(destination);

            watch.Stop();
            Console.WriteLine($"INFO: Migration DONE. [{watch.ElapsedMilliseconds}ms]");
        }
Exemple #3
0
        static void Main(string[] args)
        {
            IConfigurationRoot configuration = LoadConfiguration();
            IServiceProvider   provider      = ServiceConfiguration.CreateServiceProvider(configuration);

            IMigrator migrator = provider.GetService <IMigrator>();

            migrator.Migrate();
            Console.ReadKey();
        }
Exemple #4
0
 /// <summary>
 /// Seeds all points of the migrator
 /// </summary>
 /// <param name="migrator">The migrator</param>
 private void Seed(IMigrator migrator)
 {
     foreach (var resource in migrator.GetMigratableResources())
     {
         Console.WriteLine($@"MockResourceSeeder: migrating {resource.Code}");
         foreach (var log in migrator.Migrate(resource, migrator.LatestPoint))
         {
             Console.WriteLine(log);
         }
     }
 }
Exemple #5
0
 public static void Migrate(this DbContext v, string migration = "")
 {
     if (string.IsNullOrEmpty(migration))
     {
         v.Database.Migrate();
     }
     else
     {
         IMigrator migrator = v.GetInfrastructure().GetService <IMigrator>();
         migrator.Migrate(migration);
     }
 }
Exemple #6
0
        public static void MigrateDatabase <T>(this IWebHost host, string migration = "") where T : DbContext
        {
            using IServiceScope scope = host.Services.CreateScope();
            T db = scope.ServiceProvider.GetRequiredService <T>();

            if (string.IsNullOrEmpty(migration))
            {
                db.Database.Migrate();
            }
            else
            {
                IMigrator migrator = db.GetInfrastructure().GetService <IMigrator>();
                migrator.Migrate(migration);
            }
        }
Exemple #7
0
        protected override void ExecuteCore(string[] arguments)
        {
            var migrateCommandOptions = new MigrateCommandOptions();

            if (Parser.Default.ParseArguments(arguments, migrateCommandOptions))
            {
                Output.Info("soothsayer {0}-beta".FormatWith(Assembly.GetExecutingAssembly().GetName().Version));
                Output.EmptyLine();

                Prompt.NoPrompts = migrateCommandOptions.NoPrompt;
                if (migrateCommandOptions.NoPrompt)
                {
                    Output.Info("Running in noprompt mode, soothsayer will run migrations without prompting for any confirmations.");
                }

                if (migrateCommandOptions.Concise)
                {
                    Output.Info("Running in concise mode");
                    Output.Concise = true;
                }

                Output.Text("Migration scripts should be located in '{0}'.".FormatWith(migrateCommandOptions.InputFolder));
                Output.Info("The target environment is: {0}".FormatWith(migrateCommandOptions.Environment.Join()));
                Output.Text("Scripts will be run against the following schema '{0}' using username '{1}'.".FormatWith(migrateCommandOptions.Schema, migrateCommandOptions.Username));

                Output.Text(migrateCommandOptions.Version.HasValue
                    ? "Target database version specified, will aim to bring the database up to version {0}.".FormatWith(migrateCommandOptions.Version.Value)
                    : "No target database version specified, will aim to bring the database up to the latest version.");

                string password = GetOraclePassword(migrateCommandOptions);

                var databaseConnectionInfo = new DatabaseConnectionInfo(migrateCommandOptions.ConnectionString, migrateCommandOptions.Username, password);
                var migrationInfo          = new MigrationInfo(migrateCommandOptions.Down ? MigrationDirection.Down : MigrationDirection.Up,
                                                               migrateCommandOptions.InputFolder,
                                                               migrateCommandOptions.Schema,
                                                               migrateCommandOptions.Tablespace,
                                                               migrateCommandOptions.Environment,
                                                               migrateCommandOptions.Version,
                                                               migrateCommandOptions.UseStored,
                                                               migrateCommandOptions.Force);

                _migrator.Migrate(databaseConnectionInfo, migrationInfo);

                Output.EmptyLine();
                Prompt.ForAnyKey("Database migration completed. Press any key to exit.");
            }
        }
        private static void RunMigrations(string databaseName, TodoDbContext todoDbContext, ILogger logger)
        {
            logger.LogInformation("About to delete test database {TestDatabaseName} ...", databaseName);
            bool hasDeleteDatabase = todoDbContext.Database.EnsureDeleted();

            logger.LogInformation(
                hasDeleteDatabase
                    ? "Test database {TestDatabaseName} has been successfully deleted"
                    : "Could not find any test database {TestDatabaseName} to delete", databaseName);

            logger.LogInformation("About to run migrations against test database {TestDatabaseName} ...", databaseName);
            IMigrator databaseMigrator = todoDbContext.GetInfrastructure().GetRequiredService <IMigrator>();

            databaseMigrator.Migrate();
            logger.LogInformation("Migrations have been successfully run against test database {TestDatabaseName}",
                                  databaseName);
        }
Exemple #9
0
        private void DoImport(TCObject objectToExecuteOn)
        {
            foreach (XModule wseModule in objectToExecuteOn.GetWseModules())
            {
                try {
                    IMigrator migrator = MigratorFactory.GetMigrator(wseModule);
                    migrator.Migrate(objectToExecuteOn);
                }
                catch (Exception e) {
                    FileLogger.Instance.Error(
                        $"Migration of WSE Module 'migration for WSE Module :'{wseModule.DisplayedName}' failed due an error. This might leave the module in a inconsistent state.",
                        e);
                }
            }

            CommonUtilities.ReplaceResourceWithLastResponseResource(objectToExecuteOn);
        }
Exemple #10
0
        public GenericFileDictionary(string fileName, IMigrator <T> migrator = null) : base(fileName)
        {
            string dbType       = typeof(T).ToString();
            bool   typeMismatch = !dbType.Equals(base.TypeInfo);

            if (typeMismatch && migrator == null)
            {
                throw new Exception("Wrong DB type and no migrator specified.");
            }
            else if (typeMismatch)
            {
                List <string> keys = base.Keys;
                foreach (string key in keys)
                {
                    string objectString = base[key] as string;
                    Add(key, migrator.Migrate(objectString));
                }
                base.TypeInfo = typeof(T).ToString();
            }
        }
        private static void RunMigrations(string databaseName, TodoDbContext todoDbContext, ILogger logger)
        {
            logger.LogInformation("About to delete test database {TestDatabaseName} ...", databaseName);
            bool hasDeleteDatabase = todoDbContext.Database.EnsureDeleted();

            // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression
            if (hasDeleteDatabase)
            {
                logger.LogInformation("Test database {TestDatabaseName} has been successfully deleted", databaseName);
            }
            else
            {
                logger.LogInformation("Could not find any test database {TestDatabaseName} to delete", databaseName);
            }

            logger.LogInformation("About to run migrations against test database {TestDatabaseName} ...", databaseName);
            IMigrator databaseMigrator = todoDbContext.GetInfrastructure().GetRequiredService <IMigrator>();

            databaseMigrator.Migrate();
            logger.LogInformation("Migrations have been successfully run against test database {TestDatabaseName}",
                                  databaseName);
        }
Exemple #12
0
 public void Show()
 {
     Console.WriteLine($"Exporting Table [{Table}]...");
     _migrator.Migrate(Destination);
     Console.WriteLine($"Exporting DONE.");
 }
Exemple #13
0
        private void MigrateDb(DbContext db)
        {
            IMigrator migrator = db.Database.GetService <IMigrator>();

            migrator.Migrate();
        }