在实体框架中拦截 DataContext 对象创建以连接事件

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

我需要将一些事件与我的实体框架类连接起来,为此,我需要从 DBContext 中“拦截”这些类的检索。

我尝试在存储库级别执行此操作,当有人从 DBSet 获取对象时,在传递实体之前,我会检查并添加一个事件侦听器。

但是,延迟加载在这里的工作中遇到了麻烦。

我找到了一种使用 IDbCommandInterceptor 拦截查询的方法,有没有办法拦截实体框架对象创建本身,甚至只是延迟加载,以便我可以注入依赖项或注册事件?

c# entity-framework
3个回答
2
投票

在您的

DbContext
内,您可以注册参加
ObjectContext.ObjectMaterialized
活动。您可以在构造函数中订阅以使其变得简单。

((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += onObjectMaterialized;

签名比较简单

void onObjectMaterialized(object sender, ObjectMaterializedEventArgs e) {
  // your code here
}

现在代码知道 EF DbContext 何时创建对象。


1
投票

如果您深入了解 DbContext,您会发现 ObjectContext,它有一个与此相关的事件 (

ObjectMaterialized
)

https://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.objectmaterialized(v=vs.110).aspx


0
投票

如果有人想知道,对于 EF CORE,我们有 IMaterializationInterceptor

https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-7.0/whatsnew#simple-actions-on-entity-creation

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