public async Task CreateDatabaseAsync() { // Check if our database exists yet if (!await _dbProvider.CheckIfDatabaseExistsAsync().ConfigureAwait(false)) { await _dbProvider.CreateDatabaseAsync().ConfigureAwait(false); } // Check if DatabaseVersion table is setup, if not, create it. if (!await _dbProvider.CheckIfTableExistsAsync("DatabaseVersions").ConfigureAwait(false)) { var database = new Database(_dbProvider.DatabaseName, _dbProvider.Dialect); var dbVersionTable = database.AddTable("DatabaseVersions"); 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.ExecuteNonQueryAsync(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.CheckIfTableColumnExistsAsync("DatabaseVersions", "IsBeforeMigrationComplete").ConfigureAwait(false)) { var database = new Database(_dbProvider.DatabaseName, _dbProvider.Dialect); var dbVersionTable = database.UpdateTable("DatabaseVersions"); dbVersionTable.AddColumn("IsBeforeMigrationComplete", typeof(bool)).NotNullable(true); dbVersionTable.AddColumn("IsMigrationComplete", typeof(bool)).NotNullable(true); dbVersionTable.AddColumn("IsAfterMigrationComplete", typeof(bool)).NotNullable(true); await _dbProvider.ExecuteNonQueryAsync(database.ToString()).ConfigureAwait(false); } } }