internal static Task CompleteMigrationAsync( Func <RepositoryMigrationAsync, Task> upsertMigration, RepositoryMigrationAsync migrationToComplete) { migrationToComplete.CompleteMigration(); return(upsertMigration(migrationToComplete)); }
private static async Task ApplyMigrationAsync( IRepositoryToMigrate repositoryToMigrate, IRepositoryAsync repository, RepositoryMigrationAsync startedMigration) { try { await MigrationHelpersAsync.StartMigrationAsync( repository.AddMigrationAsync, startedMigration).ConfigureAwait(false); await startedMigration.Migration.UpdateAsync( repository, repositoryToMigrate).ConfigureAwait(false); await MigrationHelpersAsync.CompleteMigrationAsync( repository.UpsertMigrationAsync, startedMigration).ConfigureAwait(false); } catch (Exception exception) { await OnUpgradeExceptionAsync( repositoryToMigrate, repository, startedMigration, exception).ConfigureAwait(false); } }
private static async Task OnUpgradeExceptionAsync( IRepositoryToMigrate repositoryToMigrate, IRepositoryAsync repository, RepositoryMigrationAsync repositoryMigration, Exception exception) { try { await repositoryMigration.Migration.RollbackAsync( repository, repositoryToMigrate).ConfigureAwait(false); await MigrationHelpersAsync.FailMigrationAsync( repository.DeleteMigrationAsync, repositoryMigration).ConfigureAwait(false); throw new MigrationException( exception, repositoryMigration.Version); } catch (Exception rollbackEx) { await OnRollbackExceptionAsync( repositoryMigration.Migration, rollbackEx).ConfigureAwait(false); } }
internal static Task FailMigrationAsync( Func <RepositoryMigrationAsync, Task> deleteMigration, RepositoryMigrationAsync migrationToComplete) { return(deleteMigration(migrationToComplete)); }
internal static Task StartMigrationAsync( Func <RepositoryMigrationAsync, Task> addMigration, RepositoryMigrationAsync migrationToStart) { return(addMigration(migrationToStart)); }