public async Task <bool> HandleAsync(DeleteAnAatf message) { authorization.EnsureCanAccessInternalArea(); authorization.EnsureUserInRole(Roles.InternalAdmin); using (var transaction = context.Database.BeginTransaction()) { try { var aatfDeletionStatus = await getAatfDeletionStatus.Validate(message.AatfId); if (!aatfDeletionStatus.HasFlag(CanAatfBeDeletedFlags.CanDelete)) { throw new InvalidOperationException(); } await aatfDataAccess.RemoveAatf(message.AatfId); if (aatfDeletionStatus.HasFlag(CanAatfBeDeletedFlags.CanDeleteOrganisation)) { await organisationDataAccess.Delete(message.OrganisationId); } transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); if (ex.InnerException != null) { throw ex.InnerException; } throw; } finally { transaction.Dispose(); } } return(true); }