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

问题描述 投票:0回答:2

我有一个代码优先的EF数据库设置,可以通过OData控制器从前端访问它。

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

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

例如:

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

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

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

c# entity-framework-6 linq-to-entities
2个回答
0
投票

这里是处理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


0
投票

解决方案实际上很简单。

因为我只想记录来自前端的用户请求,所以我扩展了OData控制器以在请求实体时添加审核日志。

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

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

希望这对某人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.