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); } } }