public async Task SaveExtractedAnswersForApplication(Guid applicationId, List <SubmittedApplicationAnswer> answers) { _logger.LogInformation($"Saving extracted answers for application {applicationId}"); var existingAnswers = _applyDataContext.SubmittedApplicationAnswers.Where(ans => ans.ApplicationId == applicationId); _applyDataContext.SubmittedApplicationAnswers.RemoveRange(existingAnswers); var existingApplications = _applyDataContext.ExtractedApplications.Where(app => app.ApplicationId == applicationId); _applyDataContext.ExtractedApplications.RemoveRange(existingApplications); if (answers != null && answers.Any()) { answers.ForEach(a => a.ApplicationId = applicationId); _applyDataContext.SubmittedApplicationAnswers.AddRange(answers); } var application = new ExtractedApplication { ApplicationId = applicationId, ExtractedDate = DateTime.UtcNow }; _applyDataContext.ExtractedApplications.Add(application); await _applyDataContext.SaveChangesAsync(); _logger.LogInformation($"Extracted answers successfully saved for application {applicationId}"); }
public async Task SaveExtractedAnswersForApplication(Guid applicationId, List <SubmittedApplicationAnswer> answers) { _logger.LogDebug($"Saving extracted answers for application {applicationId}"); using (var dataContextTransaction = _applyDataContext.Database.BeginTransaction()) { var existingAnswers = _applyDataContext.SubmittedApplicationAnswers.Where(ans => ans.ApplicationId == applicationId); _applyDataContext.SubmittedApplicationAnswers.RemoveRange(existingAnswers); var existingApplications = _applyDataContext.ExtractedApplications.Where(app => app.ApplicationId == applicationId); _applyDataContext.ExtractedApplications.RemoveRange(existingApplications); if (answers != null && answers.Any()) { answers.ForEach(a => a.ApplicationId = applicationId); _applyDataContext.SubmittedApplicationAnswers.AddRange(answers); } var application = new ExtractedApplication { ApplicationId = applicationId, ExtractedDate = DateTime.UtcNow }; _applyDataContext.ExtractedApplications.Add(application); try { await _applyDataContext.SaveChangesAsync(); await dataContextTransaction.CommitAsync(); _logger.LogInformation($"Extracted answers successfully saved for application {applicationId}"); } #pragma warning disable CA1031 catch (NullReferenceException) when(dataContextTransaction is null && _applyDataContext.GetType() != typeof(ApplyDataContext)) { // Safe to ignore as it is the Unit Tests executing and it doesn't currently mock Transactions } #pragma warning restore CA1031 catch (DbUpdateException ex) { _logger.LogError(ex, $"Unable to save extracted answers for Application: {applicationId}"); await dataContextTransaction.RollbackAsync(); } } }