public void AddResult(Result result) { if (result == null) { throw new ArgumentNullException(nameof(result)); } _databaseContext.UseTransaction(transaction => { var discipline = _disciplinesRepository.GetDiscipline(result.Discipline.Id, transaction, true); if (discipline == null) { throw new ArgumentException("Bad discipline id is provided"); } var countingFormula = CountingFormula.Get(discipline.Counting); var attempts = result.Attempts; var attemptCount = countingFormula.AttemptCount; result.Average = countingFormula.ComputeAverage(attempts); result.AttemptCount = attemptCount; _resultsRepository.AddResult(result, transaction); }); }