protected virtual AggregateChangeReport ApplyStoveConcepts() { var changeReport = new AggregateChangeReport(); long?userId = GetAuditUserId(); List <DbEntityEntry> entries = ChangeTracker.Entries().ToList(); foreach (DbEntityEntry entry in entries) { switch (entry.State) { case EntityState.Added: CheckAndSetId(entry.Entity); SetCreationAuditProperties(entry.Entity, userId); break; case EntityState.Modified: SetModificationAuditProperties(entry, userId); if (entry.Entity is ISoftDelete && entry.Entity.As <ISoftDelete>().IsDeleted) { SetDeletionAuditProperties(entry.Entity, userId); } break; case EntityState.Deleted: CancelDeletionForSoftDelete(entry); SetDeletionAuditProperties(entry.Entity, userId); break; } AddDomainEvents(changeReport.DomainEvents, entry.Entity); } return(changeReport); }
protected virtual AggregateChangeReport ApplyStoveConcepts() { var changeReport = new AggregateChangeReport(); long?userId = GetAuditUserId(); foreach (EntityEntry entry in ChangeTracker.Entries().ToList()) { ApplyStoveConcepts(entry, userId, changeReport); } return(changeReport); }
public override int SaveChanges() { try { AggregateChangeReport changeReport = ApplyStoveConcepts(); int result = base.SaveChanges(); AggregateChangeEventHelper.PublishEvents(changeReport); return(result); } catch (DbUpdateConcurrencyException ex) { throw new StoveDbConcurrencyException(ex.Message, ex); } }
public override int SaveChanges() { try { AggregateChangeReport aggregateChangeReport = ApplyStoveConcepts(); int result = base.SaveChanges(); AggregateChangeEventHelper.PublishEvents(aggregateChangeReport); return(result); } catch (DbEntityValidationException ex) { LogDbEntityValidationException(ex); throw; } }
public override async Task <int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken)) { try { AggregateChangeReport changeReport = ApplyStoveConcepts(); int result = await base.SaveChangesAsync(cancellationToken); await AggregateChangeEventHelper.PublishEventsAsync(changeReport, cancellationToken); return(result); } catch (DbUpdateConcurrencyException ex) { throw new StoveDbConcurrencyException(ex.Message, ex); } }
public override async Task <int> SaveChangesAsync(CancellationToken cancellationToken) { try { AggregateChangeReport aggregateChangeReport = ApplyStoveConcepts(); int result = await base.SaveChangesAsync(cancellationToken); await AggregateChangeEventHelper.PublishEventsAsync(aggregateChangeReport, cancellationToken); return(result); } catch (DbEntityValidationException ex) { LogDbEntityValidationException(ex); throw; } }
protected virtual void ApplyStoveConcepts(EntityEntry entry, long?userId, AggregateChangeReport changeReport) { switch (entry.State) { case EntityState.Added: ApplyStoveConceptsForAddedEntity(entry, userId); break; case EntityState.Modified: ApplyStoveConceptsForModifiedEntity(entry, userId); break; case EntityState.Deleted: ApplyStoveConceptsForDeletedEntity(entry, userId); break; } AddDomainEvents(changeReport.DomainEvents, entry.Entity); }