如何配置Audit.Net+EF仅记录更新/删除操作,不记录新增?
解决方案
可行,无需重写Save方法,直接在Program.cs的配置中添加实体状态筛选逻辑即可实现跳过新增记录的审计日志保存,仅记录更新和删除操作。
修改后的配置代码
using Microsoft.EntityFrameworkCore; // 需要引入该命名空间以使用EntityState枚举 Audit.Core.Configuration.Setup() .UseEntityFramework(ef => ef .AuditTypeMapper(t => typeof(AuditLog)) // 核心筛选逻辑:仅处理修改或删除状态的实体 .Filter(entry => entry.EntityState == EntityState.Modified || entry.EntityState == EntityState.Deleted) .AuditEntityAction<AuditLog>((ev, entry, entity) => { entity.AuditData = entry.ToJson(); entity.EntityType = entry.EntityType.Name; entity.AuditDate = DateTime.UtcNow; entity.AuditUserName = ev.CustomFields["UserName"].ToString(); entity.AuditUserNID = ev.CustomFields["UserNID"].ToString(); entity.AuditUserEmail = ev.CustomFields["UserEmail"].ToString(); entity.TablePk = entry.PrimaryKey.First().Value.ToString(); }) .IgnoreMatchedProperties(true));
逻辑说明
Filter方法会对每个待审计的实体条目做校验,只有实体状态为Modified(更新)或Deleted(删除)的条目才会触发后续的AuditLog生成与保存操作。- 新增状态(
Added)的实体会被自动过滤,不会生成审计日志,完全匹配需求。 - 该方案无需修改DbContext或重写Save方法,仅通过配置即可实现,保持代码简洁性。
内容的提问来源于stack exchange,提问作者zawisza
相关产品推荐
相关产品推荐

