Example #1
0
        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());
        }