Example #1
0
        public static void Initialize(DatabaseConfig config)
        {
            s_connectionString = $"SslMode=none;Server={config.Host};Port={config.Port};Database={config.Database};Uid={config.Username};Pwd={config.Password};Pooling=true;";
            OrmConfiguration.DefaultDialect = SqlDialect.MySql;

            using (var con = Open())
            {
                if (con.QueryFirstOrDefault($"SHOW DATABASES LIKE \"{config.Database}\"") == null)
                {
                    throw new DatabaseNotFoundException(config.Database);
                }

                var databaseProvider = new MysqlDatabaseProvider(con)
                {
                    TableName = "__version"
                };
                var assemblyProvider = new AssemblyMigrationProvider(typeof(Base).Assembly, typeof(Base).Namespace);
                var migrator         = new SimpleMigrator(assemblyProvider, databaseProvider);
                migrator.Load();
                if (migrator.CurrentMigration.Version != migrator.LatestMigration.Version)
                {
                    if (config.RunMigration)
                    {
                        migrator.MigrateToLatest();
                    }
                    else
                    {
                        throw new DatabaseVersionMismatchException(migrator.CurrentMigration.Version, migrator.LatestMigration.Version);
                    }
                }
            }
        }
Example #2
0
        public void Migrate(string[] args)
        {
            var options          = Cli.Parse <MigrateOptions>(args);
            var connectionString = $"SslMode=none;Server={options.Host};Port={options.Port};Database={options.Database};Uid={options.User};Pwd={options.Password};";

            using (var con = new MySqlConnection(connectionString))
            {
                con.Open();
                var databaseProvider = new MysqlDatabaseProvider(con)
                {
                    TableName = "__version"
                };
                AssemblyMigrationProvider assemblyProvider = null;
                switch (options.Schema.ToLower())
                {
                case "auth":
                    assemblyProvider = new AssemblyMigrationProvider(s_authType.Assembly, s_authType.Namespace);
                    break;

                case "game":
                    assemblyProvider = new AssemblyMigrationProvider(s_gameType.Assembly, s_gameType.Namespace);
                    break;

                default:
                    Error("Invalid schema");
                    break;
                }

                try
                {
                    var migrator = new SimpleMigrator(assemblyProvider, databaseProvider, new ConsoleLogger());
                    migrator.Load();
                    if (options.CurrentVersion > 0)
                    {
                        migrator.Baseline(options.CurrentVersion);
                    }

                    if (options.Version == 0)
                    {
                        migrator.MigrateToLatest();
                    }
                    else
                    {
                        migrator.MigrateTo(options.Version);
                    }
                }
                catch (MigrationNotFoundException ex)
                {
                    Error(ex.Message);
                }
            }
        }
        public async Task <ISimpleMigrator> CreateAsync(MigrationOptions options)
        {
            var projectInfo = await _projectInfoDiscoverer.DiscoverAsync(
                !options.NoBuild,
                options.Configuration,
                options.Framework,
                options.Project,
                options.Assembly,
                options.ConnectionString,
                options.ConnectionStringName);

            using (var loader = new DependencyAwareAssemblyLoader(projectInfo.ProjectAssembly))
            {
                var migrationProvider = new AssemblyMigrationProvider(projectInfo.ProjectAssembly);
                var connection        = new SqlConnection(projectInfo.ConnectionString);
                var dbProvider        = new MssqlDatabaseProvider(connection)
                {
                    SchemaName = "dbo"
                };
                var migrator = new SimpleMigrator(migrationProvider, dbProvider, _migrationLogger);
                migrator.Load();
                return(migrator);
            }
        }