private Task OnAfterSaveChanges(ListAuditEntry auditEntries) { foreach (var auditEntry in auditEntries.AuditEntries) { // Get the final value of the temporary properties foreach (var prop in auditEntry.TemporaryProperties) { if (prop.Metadata.IsPrimaryKey()) { auditEntry.HeaderAudit.ItemAudits.Add(new ItemAudit { FieldName = prop.Metadata.Name, NewValue = prop.CurrentValue.ToString() }); auditEntry.PrimaryKeys.Add(prop.CurrentValue.ToString()); } else { if (!string.IsNullOrWhiteSpace((prop.CurrentValue ?? "").ToString())) { auditEntry.HeaderAudit.ItemAudits.Add(new ItemAudit { FieldName = prop.Metadata.Name, NewValue = prop.CurrentValue.ToString() }); } } } string pk = string.Join('|', auditEntry.PrimaryKeys); auditEntry.HeaderAudit.ItemAudits = auditEntry.HeaderAudit.ItemAudits.Select(c => { c.PrimaryKey = pk; return(c); }).ToList(); _headerAuditRepository.AddAsync(auditEntry.HeaderAudit); } return(Task.CompletedTask); }
private ListAuditEntry OnBeforeSaveChanges() { _context.Instance.ChangeTracker.DetectChanges(); var auditEntries = new ListAuditEntry(); foreach (var entry in _context.Instance.ChangeTracker.Entries()) { if (entry.Entity is IAudit || entry.State == EntityState.Detached || entry.State == EntityState.Unchanged) { continue; } AuditEntry auditEntry = new AuditEntry(); auditEntry.HeaderAudit.TableName = entry.Metadata.DisplayName(); auditEntry.HeaderAudit.Date = DateTime.Now; auditEntry.HeaderAudit.UserName = "******"; auditEntry.HeaderAudit.Operation = GetAuditOperation(entry.State); foreach (var property in entry.Properties) { if (property.IsTemporary) { // value will be generated by the database, get the value after saving auditEntry.TemporaryProperties.Add(property); continue; } string propertyName = property.Metadata.Name; if (property.Metadata.IsPrimaryKey()) { auditEntry.HeaderAudit.ItemAudits.Add(new ItemAudit { FieldName = propertyName, NewValue = property.CurrentValue.ToString(), }); auditEntry.PrimaryKeys.Add(property.CurrentValue.ToString()); continue; } switch (entry.State) { case EntityState.Added: auditEntry.HeaderAudit.ItemAudits.Add(new ItemAudit { FieldName = propertyName, NewValue = (property.CurrentValue ?? "").ToString(), }); break; case EntityState.Deleted: auditEntry.HeaderAudit.ItemAudits.Add(new ItemAudit { FieldName = propertyName, NewValue = (property.CurrentValue ?? "").ToString(), }); break; case EntityState.Modified: if ((property.IsModified) && !string.IsNullOrWhiteSpace((property.CurrentValue ?? "").ToString())) { auditEntry.HeaderAudit.ItemAudits.Add(new ItemAudit { FieldName = propertyName, NewValue = (property.CurrentValue ?? "").ToString(), }); } break; } } auditEntries.AuditEntries.Add(auditEntry); } return(auditEntries); }