Пример #1
0
        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);
                }
            }
        }