public InterceptionResult <int> SavingChanges( DbContextEventData eventData, InterceptionResult <int> result) { _audit = CreateAudit(eventData.Context); using (var auditContext = new AuditContext(_connectionString)) { auditContext.Add(_audit); auditContext.SaveChanges(); } return(result); }
public async ValueTask <InterceptionResult <int> > SavingChangesAsync( DbContextEventData eventData, InterceptionResult <int> result, CancellationToken cancellationToken = default) { _audit = CreateAudit(eventData.Context); using (var auditContext = new AuditContext(_connectionString)) { auditContext.Add(_audit); await auditContext.SaveChangesAsync(); } return(result); }
private static SaveChangesAudit CreateAudit(DbContext context) { context.ChangeTracker.DetectChanges(); var audit = new SaveChangesAudit { AuditId = Guid.NewGuid(), StartTime = DateTime.UtcNow }; foreach (var entry in context.ChangeTracker.Entries()) { var auditMessage = entry.State switch { EntityState.Deleted => CreateDeletedMessage(entry), EntityState.Modified => CreateModifiedMessage(entry), EntityState.Added => CreateAddedMessage(entry), _ => null }; if (auditMessage != null) { audit.Entities.Add(new EntityAudit { State = entry.State, AuditMessage = auditMessage }); } } return(audit); string CreateAddedMessage(EntityEntry entry) => entry.Properties.Aggregate( $"Inserting {entry.Metadata.DisplayName()} with ", (auditString, property) => auditString + $"{property.Metadata.Name}: '{property.CurrentValue}' "); string CreateModifiedMessage(EntityEntry entry) => entry.Properties.Where(property => property.IsModified || property.Metadata.IsPrimaryKey()).Aggregate( $"Updating {entry.Metadata.DisplayName()} with ", (auditString, property) => auditString + $"{property.Metadata.Name}: '{property.CurrentValue}' "); string CreateDeletedMessage(EntityEntry entry) => entry.Properties.Where(property => property.Metadata.IsPrimaryKey()).Aggregate( $"Deleting {entry.Metadata.DisplayName()} with ", (auditString, property) => auditString + $"{property.Metadata.Name}: '{property.CurrentValue}' "); } #endregion }