如何用Audit.NET轻松实现Entity Framework数据库操作审计
如何用Audit.NET轻松实现Entity Framework数据库操作审计
【免费下载链接】Audit.NETAn extensible framework to audit executing operations in .NET项目地址: https://gitcode.com/gh_mirrors/au/Audit.NET
Audit.NET是一个功能强大的开源框架,专为.NET应用程序设计,能够轻松实现对Entity Framework数据库操作的全面审计跟踪。通过简单的配置,开发人员可以自动记录数据变更历史、追踪操作详情,并满足合规性要求。
📋 为什么选择Audit.NET进行EF审计?
在现代应用开发中,数据库操作审计是确保数据完整性和满足合规要求的关键环节。Audit.NET提供了以下核心优势:
- 零侵入设计:无需修改现有数据访问代码即可实现审计
- 全面跟踪能力:记录实体创建、更新、删除的完整变更历史
- 灵活配置选项:可自定义审计范围、包含/排除特定实体或属性
- 多存储支持:审计日志可保存到数据库、文件、Elasticsearch等多种目标
🚀 快速开始:3步实现EF审计
1️⃣ 安装必要的NuGet包
通过NuGet安装Audit.NET核心包和Entity Framework集成包:
Install-Package Audit.NET Install-Package Audit.EntityFramework2️⃣ 配置DbContext继承AuditDbContext
修改你的DbContext类,使其继承自AuditDbContext而非原生DbContext:
using Audit.EntityFramework; public class AppDbContext : AuditDbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<Product> Products { get; set; } public DbSet<Order> Orders { get; set; } }核心实现位于src/Audit.EntityFramework/AuditDbContext.cs,这个抽象类封装了所有审计逻辑。
3️⃣ 基础配置(可选)
通过代码或配置文件设置审计行为:
Audit.Core.Configuration.Setup() .UseEntityFramework(x => x .AuditTypeMapper(t => typeof(AuditLog)) .AuditEntityAction((evt, entry, auditEntity) => { var audit = (AuditLog)auditEntity; audit.AuditDate = DateTime.UtcNow; audit.UserId = CurrentUser.Id; audit.TableName = entry.EntityType.Name; audit.OldValues = entry.OldValues; audit.NewValues = entry.NewValues; }) .IgnoreMatchedProperties());⚙️ 高级配置选项
实体级审计控制
使用AuditDbContextAttribute特性控制整个DbContext的审计行为:
[AuditDbContext(Mode = AuditOptionMode.OptIn)] public class AppDbContext : AuditDbContext { // 上下文实现... }该特性定义在src/Audit.EntityFramework/AuditDbContextAttribute.cs,支持多种配置参数。
属性级包含/排除
通过数据注解控制特定属性的审计行为:
public class Product { public int Id { get; set; } public string Name { get; set; } [AuditIgnore] // 排除此字段的审计 public string InternalNotes { get; set; } [AuditInclude] // 显式包含此字段(在OptIn模式下) public decimal Price { get; set; } }自定义审计事件处理
重写OnScopeCreated、OnScopeSaving或OnScopeSaved方法自定义审计行为:
public override void OnScopeCreated(IAuditScope auditScope) { // 添加自定义字段 auditScope.SetCustomField("ApplicationVersion", "1.0.0"); auditScope.SetCustomField("MachineName", Environment.MachineName); }💡 实用技巧
临时禁用审计:设置
AuditDisabled属性临时关闭审计using (var context = new AppDbContext(options)) { context.AuditDisabled = true; // 执行不需要审计的操作 }获取审计结果:使用
SaveChangesGetAudit方法获取审计事件var auditEvent = context.SaveChangesGetAudit(); Console.WriteLine(auditEvent.ToJson());添加自定义字段:使用
AddAuditCustomField方法添加业务相关信息context.AddAuditCustomField("TransactionId", Guid.NewGuid().ToString()); context.SaveChanges();
📝 总结
Audit.NET为Entity Framework提供了简单而强大的审计解决方案,通过继承AuditDbContext和简单配置,即可实现全面的数据库操作审计。无论是小型应用还是企业级系统,Audit.NET都能满足数据跟踪和合规需求,帮助开发人员构建更安全、更可靠的应用程序。
要了解更多高级功能和配置选项,请参考项目源代码中的src/Audit.EntityFramework目录,其中包含了完整的实现和示例。
【免费下载链接】Audit.NETAn extensible framework to audit executing operations in .NET项目地址: https://gitcode.com/gh_mirrors/au/Audit.NET
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
