繁体   English   中英

在 EF6 中使用 LinQ 审核实体读取的最佳方法是什么?

[英]What is the best way to audit reading of entities with LinQ in EF6?

我有一个代码优先的 EF 数据库设置,可以从前端使用 OData controller 进行访问。

我正在尝试审核用户加载的实体。

LinQ 执行后如何拦截物化实体?

例如:

var entity = _service.Queryable().FirstOrDefault(x => x.ID == key);

我想在实体实现并可以访问它之后添加一个自定义操作。

我尝试使用 DbContext.Database.Log,但我只得到 EF 生成的查询。

解决方案实际上很简单。

由于我只想记录来自前端的用户请求,因此我扩展了 OData controller 以在请求实体时添加审计日志。

这样,无论在后端进行什么 LinQ 过滤,我都可以访问用户请求的结果:

var entity = _service.Queryable().Where(x => x.ID == key);
Logger.AddAuditLog(entity);
//... continue execution

希望这对某人有帮助!

这是一种使用ObjectMaterialized事件的方法

using (var context = new EntityContext())
{
    // could be set globally in the constructor
    var materialized = new List<object>();
    ((IObjectContextAdapter) context).ObjectContext.ObjectMaterialized += (sender, args) => materialized.Add(args.Entity);

    var list = context.Customers.ToList();

    FiddleHelper.WriteTable(materialized);      
}

在线示例: https://dotnetfiddle.net/yzmlSO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM