private bool WriteAttempt(TekReleaseWorkflowStateEntity item) { if (++_AttemptCount > AttemptCountMax) { _Logger.WriteMaximumCreateAttemptsReached(); throw new InvalidOperationException("Maximum create attempts reached."); } if (_AttemptCount > 1) { _Logger.WriteDuplicatesFound(_AttemptCount); } item.LabConfirmationId = _LabConfirmationIdService.Next(); item.BucketId = _NumberGenerator.NextByteArray(_WorkflowConfig.BucketIdLength); item.ConfirmationKey = _NumberGenerator.NextByteArray(_WorkflowConfig.ConfirmationKeyLength); try { _WorkflowDbContext.SaveAndCommit(); _Logger.WriteCommitted(); return(true); } catch (DbUpdateException ex) { _WorkflowDbContext.Remove(item); if (CanRetry(ex)) { return(false); } throw; } }
private bool TryGenerateRemainingFieldsAndWriteToDb(TekReleaseWorkflowStateEntity item) { if (++_AttemptCount > AttemptCountMax) { _logger.WriteMaximumCreateAttemptsReached(); throw new InvalidOperationException("Maximum create attempts reached."); } if (_AttemptCount > 1) { _logger.WriteDuplicatesFound(_AttemptCount); } item.GGDKey = _luhnModNGenerator.Next(_luhnModNConfig.ValueLength); item.BucketId = _numberGenerator.NextByteArray(UniversalConstants.BucketIdByteCount); item.ConfirmationKey = _numberGenerator.NextByteArray(UniversalConstants.ConfirmationKeyByteCount); try { _workflowDbContext.SaveAndCommit(); _logger.WriteCommitted(); return(true); } catch (DbUpdateException ex) { _workflowDbContext.Database.CurrentTransaction.RollbackAsync(); _workflowDbContext.Remove(item); if (CanRetry(ex)) { return(false); } throw; } }