【发布时间】:2011-01-04 18:40:46
【问题描述】:
我正在尝试将一些业务逻辑挂接到 EntityFramework v4 上,而我能做到这一点的最佳位置是在查询运行之前。
我希望我能够覆盖默认的 IQueryProvider,只需在 Execute(Expression expr) 中添加一个方法挂钩:
public TResult Execute<TResult>(Expression expression)
{
// Do stuff here.
return this.BaseProvider.Execute<TResult>(expression);
}
但是,我很难让 IQueryable 使用我的 IQueryProvider(ObjectQuery 对象有一个 Provider{} 属性,但它是 get; only 并返回一个预定义的类实例)。 有没有办法以这种方式使用您自己的自定义 IQueryProvider 而无需编写全新的查询堆栈(ObjectSet、ObjectContext 等)?
编辑
抱歉:如果可能的话,我不是在谈论添加任何新类,除了实现 IQueryProvider 的类。包装器原则上很好,但由于我无意实现 IObjectSet 或子类化 ObjectQuery
public IQueryable<TElement> CreateQuery<TElement>(Expression expression)
{
return this.BaseProvider.CreateQuery<TElement>(expression);
}
在此之后,由于我在包装器内使用标准 ObjectSet,IQueryProvider 将恢复为预定义的,并且我的 IQueryProvider 将不再捕获任何调用。
那么:有没有办法实现和使用 IQueryProvider 而无需尝试添加包装器,这会迫使我使用 IQueryxxx 对象的完整自定义堆栈?
【问题讨论】:
标签: c# entity-framework-4