private static string GenerateMigrationScript( ConnectionStringSettings connectionStringSettings, ReverseEngineerSettings reverseEngineerSettings, IConfiguration configuration, bool naive, out IEnumerable<string> warnings, out IEnumerable<string> errors) { // fetch the from state var dialectFactory = new DialectFactory(); var dialect = dialectFactory.Create(connectionStringSettings.ToSystem()); var factory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName); // create database if not exists CreateDatabaseIfNotExists(connectionStringSettings, factory, dialect); DatabaseSchema schema; using (new TimedOperation("-- Reading database contents...")) { var databaseReader = new DatabaseReader(connectionStringSettings.ConnectionString, connectionStringSettings.ProviderName); schema = databaseReader.ReadAll(); } IEnumerable<IMap> fromMaps; using (new TimedOperation("-- Reverse engineering...")) { Console.WriteLine(); var engineer = new Engineer(reverseEngineerSettings.ExtraPluralizationWords); fromMaps = engineer.ReverseEngineer(schema, dialect, reverseEngineerSettings.GetTablesToIgnore(), consoleAnswerProvider, false); Console.Write("-- "); } using (var connection = factory.CreateConnection()) { connection.ConnectionString = connectionStringSettings.ConnectionString; // set up migrator IMigrator migrator; if (naive) { throw new NotSupportedException("The Naive Migrator is no longer supported"); } migrator = new Migrator( dialect, new CreateTableWriter(dialect), new AlterTableWriter(dialect), new DropTableWriter(dialect), new StatisticsProvider(connection, dialect)); // run the migrator string script; using (new TimedOperation("-- Generating diff...")) { script = migrator.GenerateSqlDiff( fromMaps, configuration.Maps, consoleAnswerProvider, new ConsoleLogger(isVerbose), reverseEngineerSettings.GetIndexesToIgnore(), out warnings, out errors); // TODO: do things with warnings and errors return script; } } }