Part of DKNet.EfCore.AuditLogs. Use the Quick Start context and publisher. After its first save, update the tracked item:
var item = await db.Items.SingleAsync();
item.Name = "Tea";
await db.SaveChangesAsync(); // Updated: Item, by user-42
AuditLogEntry contains Action, EntityName, Keys, Changes and the entity’s CreatedBy, CreatedOn, UpdatedBy, UpdatedOn. Each AuditFieldChange has FieldName, OldValue, NewValue; composite primary keys produce multiple Keys entries. AuditLogAction is Created, Updated or Deleted.
The package architecture shows the shared Hooks snapshot pipeline. Only entities implementing IAuditedProperties are eligible; deriving from AuditedEntity is optional.
Changes list. Modified entries include fields marked modified or whose values differ; deletes capture old scalar values with NewValue = null.SaveChangesAsync. The underlying Hooks interceptor rejects synchronous saves unless hooks are disabled.