/// <summary> /// /// </summary> /// <returns></returns> public override int SaveChanges() { var now = DateTime.Now; var userId = _currentApplicationUserService.GetCurrentUser(); //Generate new guids for new entities if not populated by EF var newEntities = ChangeTracker.Entries <IEntity>().Where(x => x.State == EntityState.Added && x.Entity.Id == Guid.Empty); newEntities.ForEach(x => x.Entity.Id = Guid.NewGuid()); var modifiedEntities = ChangeTracker.Entries <IMutableEntity>().Where(x => x.State == EntityState.Modified); foreach (var modifiedEntity in modifiedEntities) { modifiedEntity.Entity.ModifiedAt = now; modifiedEntity.Entity.ModifiedById = userId; } var createdMutableEntities = ChangeTracker.Entries <IMutableEntity>().Where(x => x.State == EntityState.Added); foreach (var createdEntity in createdMutableEntities) { createdEntity.Entity.CreatedAt = now; createdEntity.Entity.CreatedById = userId; createdEntity.Entity.ModifiedAt = now; createdEntity.Entity.ModifiedById = userId; } var createdImmutableEntities = ChangeTracker.Entries <IImmutableEntity>().Where(x => x.State == EntityState.Added); foreach (var createdEntity in createdImmutableEntities) { createdEntity.Entity.CreatedAt = now; createdEntity.Entity.CreatedById = userId; } return(base.SaveChanges()); }