public async Task ApplyMigrationsAsync() { IEnumerable <AppDataMigration> migrations = _migrationDiscoverService.DiscoverMigrations(GetType().Assembly); List <Guid> ids = await _migrationRepository.GetAllAppliedMigrationIdsAsync(); foreach (var migration in migrations) { if (ids.Contains(migration.MigrationId)) { continue; } migration.Timestamp = _dotNetProvider.DateTimeNow; var context = new MigrationContext { Database = _mongoDatabase, DotNetProvider = _dotNetProvider }; bool upResult = migration.Up(context); if (upResult) { await _migrationRepository.AddMigrationComplete(migration); } else { bool downResult = migration.Down(context); if (!downResult) { throw new InvalidOperationException("can you do anything correct?"); } } } }