Moh*_*mad 3 entity-framework-core
我正在试图弄清楚如何使用Entity Framework Cores 2.1新的ChangeTracker.Tracked事件来挂钩阅读查询.不幸的是,我无法理解如何实现这一点.由于它是一项新功能,因此无法在其上找到任何文章,官方Microsoft文档网站也不提供任何帮助或示例代码.我的场景非常简单.我有一个包含以下列的数据库: id,customerId,metadata. 当用户查询此表时,我想拦截查询结果集,对于每一行,我想将customerId与当前登录的用户进行比较.我希望ChangeTracker.Tracked事件可以帮助我拦截返回结果集.我正在寻找一些关于如何实现上述的示例代码.
以下是该ChangeTracker.Tracked事件的示例用法.
将以下方法添加到您的上下文(要求using Microsoft.EntityFrameworkCore.ChangeTracking;):
void OnEntityTracked(object sender, EntityTrackedEventArgs e)
{
if (e.FromQuery && e.Entry.Entity is YourEntityClass)
{
var entity = (YourEntityClass)e.Entry.Entity;
bool isCurrentUser = entity.customerId == CurrentUserId;
// do something (not sure what)
}
}
Run Code Online (Sandbox Code Playgroud)
并将其附加到ChangeTracker.Tracked上下文构造函数中的even:
ChangeTracker.Tracked += OnEntityTracked;
Run Code Online (Sandbox Code Playgroud)
如Tracked事件文档中所述:
上下文跟踪实体时触发的事件,因为它是从跟踪查询返回的,或者是因为它已附加或添加到上下文中.
有些事要提.
对于无跟踪查询,不会触发该事件
对于由跟踪查询结果集创建且尚未由上下文跟踪的每个实体实例触发该事件
所述bool FromQuery事件参数的属性被用于区分如果事件从跟踪查询物化过程或通过用户代码(烧制Attach,Add等等呼叫).
EntityEntry Entry事件args 的属性使您可以访问实体实例和其他相关信息(基本上与调用非泛型DbContext.Entry方法时获得的信息相同)
| 归档时间: |
|
| 查看次数: |
1455 次 |
| 最近记录: |