我需要将一些事件与我的实体框架类连接起来,为此,我需要从 DBContext 中“拦截”这些类的检索。
我尝试在存储库级别执行此操作,当有人从 DBSet 获取对象时,在传递实体之前,我会检查并添加一个事件侦听器。
但是,延迟加载在这里的工作中遇到了麻烦。
我找到了一种使用 IDbCommandInterceptor 拦截查询的方法,有没有办法拦截实体框架对象创建本身,甚至只是延迟加载,以便我可以注入依赖项或注册事件?
在您的
DbContext
内,您可以注册参加 ObjectContext.ObjectMaterialized
活动。您可以在构造函数中订阅以使其变得简单。
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += onObjectMaterialized;
签名比较简单
void onObjectMaterialized(object sender, ObjectMaterializedEventArgs e) {
// your code here
}
现在代码知道 EF DbContext 何时创建对象。
如果您深入了解 DbContext,您会发现 ObjectContext,它有一个与此相关的事件 (
ObjectMaterialized
)
如果有人想知道,对于 EF CORE,我们有 IMaterializationInterceptor