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

C# 拦截实体框架中的DataContext对象创建以连接事件,c#,entity-framework,C#,Entity Framework,我需要用我的实体框架类连接一些事件,为此我需要从DBContext“截取”这些类的检索 我曾尝试在存储库级别执行此操作,当有人从数据库集获取对象时,在传递实体之前,我会遍历并添加一个事件侦听器 然而,延迟加载在这里的工作中带来了麻烦 我找到了一种使用IDbCommandInterceptor拦截查询的方法,有没有办法拦截实体框架对象创建本身,甚至只是延迟加载,这样我就可以注入依赖项,或者注册事件?在DbContext中,您可以注册到ObjectContext.ObjectMaterialized

我需要用我的实体框架类连接一些事件,为此我需要从DBContext“截取”这些类的检索

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

然而,延迟加载在这里的工作中带来了麻烦


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

DbContext
中,您可以注册到
ObjectContext.ObjectMaterialized
事件。您可以在构造函数中进行订阅以使其变得简单

((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += onObjectMaterialized;
签名相对简单

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

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

如果您在DbContext中再深入一点,就会找到ObjectContext,其中有一个事件(
ObjectMaterialized


啊,我可能发现了“ObjectMaterialized”事件。我花了一段时间在谷歌上搜索拦截器和ObjectProxy,然后就在大家回答的时候偶然发现了这一点!谢谢正是我需要的。