Exemplo n.º 1
0
        public async Task CreateDatabase()
        {
            // Check if our database exists yet
            if (!await _dbProvider.CheckIfDatabaseExists().ConfigureAwait(false))
            {
                await _dbProvider.CreateDatabase().ConfigureAwait(false);
            }

            // Check if DatabaseVersion table is setup, if not, create it.
            if (!await _dbProvider.CheckIfTableExists(WellKnownValues.VersionTableName).ConfigureAwait(false))
            {
                var database = new Database(_dbProvider.DatabaseName, _dbProvider.Dialect);

                var dbVersionTable = database.AddTable(WellKnownValues.VersionTableName);
                dbVersionTable.AddColumn("VersionNumber", typeof(int)).PrimaryKey().Clustered().NotNullable();
                dbVersionTable.AddColumn("MigrationDate", typeof(DateTime)).NotNullable();
                dbVersionTable.AddColumn("IsBeforeMigrationComplete", typeof(bool)).NotNullable(true);
                dbVersionTable.AddColumn("IsMigrationComplete", typeof(bool)).NotNullable(true);
                dbVersionTable.AddColumn("IsAfterMigrationComplete", typeof(bool)).NotNullable(true);

                await _dbProvider.ExecuteNonQuery(database.ToString()).ConfigureAwait(false);
            }
            else
            {
                // Check if the new fields have bee added to the DatabaseVersion table yet, if not add them.
                if (!await _dbProvider.CheckIfTableColumnExists(WellKnownValues.VersionTableName, "IsBeforeMigrationComplete").ConfigureAwait(false))
                {
                    var database = new Database(_dbProvider.DatabaseName, _dbProvider.Dialect);

                    var dbVersionTable = database.UpdateTable(WellKnownValues.VersionTableName);
                    dbVersionTable.AddColumn("IsBeforeMigrationComplete", typeof(bool)).NotNullable(true);
                    dbVersionTable.AddColumn("IsMigrationComplete", typeof(bool)).NotNullable(true);
                    dbVersionTable.AddColumn("IsAfterMigrationComplete", typeof(bool)).NotNullable(true);

                    await _dbProvider.ExecuteNonQuery(database.ToString()).ConfigureAwait(false);
                }
            }
        }