/// <summary>
        /// Deletes those allowed errors whose context have changed. In the base implementation this means
        /// where any involved row has changed since the error creation. Additional context change situations
        /// such as a change in the quality condition can be detected by the sub-repository.
        /// </summary>
        /// <param name="qualityConditions">The quality conditions.</param>
        /// <param name="invalidateAllowedErrorsIfAnyInvolvedObjectChanged">
        /// if set to <c>true</c> allowed errors are invalidated if any involved object changed.</param>
        /// <param name="invalidateAllowedErrorsIfQualityConditionWasUpdated">
        /// if set to <c>true</c> allowed errors are invalidated if the quality condition was updated.</param>
        public void DeleteInvalidAllowedErrors(
            [NotNull] IEnumerable <QualityCondition> qualityConditions,
            bool invalidateAllowedErrorsIfAnyInvolvedObjectChanged,
            bool invalidateAllowedErrorsIfQualityConditionWasUpdated)
        {
            // TODO: consider using AllowedErrorList property, remove qualityConditions parameter
            Assert.ArgumentNotNull(qualityConditions, nameof(qualityConditions));

            ICollection <QualityCondition> qualityConditionCollection =
                CollectionUtils.GetCollection(qualityConditions);

            var allowedErrors =
                new List <AllowedError>(GetAllowedErrors(qualityConditionCollection));

            AllowedErrorUtils.InvalidateAllowedErrors(
                allowedErrors,
                qualityConditionCollection,
                _verificationContext,
                invalidateAllowedErrorsIfAnyInvolvedObjectChanged,
                invalidateAllowedErrorsIfQualityConditionWasUpdated);

            List <AllowedError> invalidErrors =
                allowedErrors.Where(error => error.Invalidated).ToList();

            AllowedErrorUtils.DeleteAllowedErrors(invalidErrors);
        }
 /// <summary>
 /// Ensures that the relevant allowed errors are cached in <see cref="AllowedErrorList"/>
 /// and invalidates those allowed errors that should be deleted, such as where involved
 /// objects do not exist any more.
 /// </summary>
 /// <param name="qualityConditions"></param>
 /// <param name="invalidateAllowedErrorsIfAnyInvolvedObjectChanged"></param>
 /// <param name="invalidateAllowedErrorsIfQualityConditionWasUpdated"></param>
 public void InvalidateAllowedErrors(
     [NotNull] IEnumerable <QualityCondition> qualityConditions,
     bool invalidateAllowedErrorsIfAnyInvolvedObjectChanged,
     bool invalidateAllowedErrorsIfQualityConditionWasUpdated)
 {
     AllowedErrorUtils.InvalidateAllowedErrors(
         AllowedErrorList, qualityConditions, _verificationContext,
         invalidateAllowedErrorsIfAnyInvolvedObjectChanged,
         invalidateAllowedErrorsIfQualityConditionWasUpdated);
 }