gpt4 book ai didi

entity-framework-core - Entity Framework 核心 2.1,ChangeTracker.Tracked

转载 作者:行者123 更新时间:2023-12-04 02:26:34 24 4
gpt4 key购买 nike

我试图弄清楚如何使用 Entity Framework Cores 2.1 新的 ChangeTracker.Tracked 事件来 Hook 阅读查询。不幸的是,我无法理解如何实现这一点。
由于这是一项新功能,因此无法找到有关它的任何文章,并且 Microsoft 官方文档站点不提供任何帮助或示例代码。
我的场景很简单。我有一个包含以下列的数据库:
id、customerId、元数据。
当用户查询此表时,我想拦截查询结果集,并且对于每一行,我想将 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)
}
}

并将其附加到 ChangeTracker.Tracked即使在您的上下文构造函数中:

ChangeTracker.Tracked += OnEntityTracked;

Tracked 中所述事件 documentation :

An event fired when an entity is tracked by the context, either because it was returned from a tracking query, or because it was attached or added to the context.



有些事情要提。
  • 事件是不是 no-tracking queries 被解雇
  • 该事件针对由跟踪查询结果集创建但尚未被上下文跟踪的每个实体实例触发
  • bool FromQuery事件 args 的属性用于区分事件是从跟踪查询具体化过程还是通过用户代码( AttachAdd 等调用)触发。
  • EntityEntry Entry事件 args 的属性使您可以访问实体实例和其他相关信息(基本上与调用非泛型 DbContext.Entry 方法时获得的信息相同)
  • 关于entity-framework-core - Entity Framework 核心 2.1,ChangeTracker.Tracked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51036526/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com