private void PreSaveChanges(ChangedEntriesTracker tracker, IEnumerable <IValidationDomainRule> validationRules)
 {
     foreach (var validationRule in validationRules.OrderBy(x => x.Order))
     {
         validationRule.Validate(tracker);
     }
 }
 private void PostSaveChanges(ChangedEntriesTracker tracker, IEnumerable <IPostProcessingDomainRule> postProcessingRules)
 {
     foreach (var postProcessingRule in postProcessingRules.OrderBy(x => x.Order))
     {
         postProcessingRule.Execute(tracker);
     }
 }
        /// <inheritdoc/>
        public override async Task <int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default(CancellationToken))
        {
            var tracker = new ChangedEntriesTracker(ChangeTracker);

            PreSaveChanges(tracker, _serviceProvider.GetServices <IValidationDomainRule>());
            var res = await base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);

            PostSaveChanges(tracker, _serviceProvider.GetServices <IPostProcessingDomainRule>());
            return(res);
        }
        /// <inheritdoc/>
        public override int SaveChanges(bool acceptAllChangesOnSuccess)
        {
            var tracker = new ChangedEntriesTracker(ChangeTracker);

            PreSaveChanges(tracker, _serviceProvider.GetServices <IValidationDomainRule>());
            var res = base.SaveChanges(acceptAllChangesOnSuccess);

            PostSaveChanges(tracker, _serviceProvider.GetServices <IPostProcessingDomainRule>());
            return(res);
        }