public override async Task <int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) { var entityList = AttributesHelper.GetAuditedEntities(this); ChangeTracker.DetectChanges(); var modifiedEntities = ChangeTracker.Entries() .Where(p => entityList.Contains(p.Entity.GetType().Name) && (p.State == EntityState.Modified || p.State == EntityState.Added || p.State == EntityState.Deleted || p.State == EntityState.Modified || p.State == EntityState.Detached)) .Select(x => x).ToList(); var now = DateTime.UtcNow; foreach (var entity in modifiedEntities) { StartAudit(entity); } var validationErrors = ChangeTracker .Entries <IValidatableObject>() .SelectMany(e => e.Entity.Validate(null)) .Where(r => r != ValidationResult.Success); if (validationErrors.Any()) { // Possibly throw an exception here foreach (var err in validationErrors) { Trace.TraceError(err.ErrorMessage); } } return(await base.SaveChangesAsync()); }