私はEntityFramework v4にいくつかのビジネスロジックをフックしようとしています。これを実行できる最良の場所は、クエリが実行される直前です。しかし、私は難易度のIQueryableは私のIQueryProviderを使用するようになってを抱えているIQueryProviderオーバーライド
public TResult Execute<TResult>(Expression expression)
{
// Do stuff here.
return this.BaseProvider.Execute<TResult>(expression);
}
:
は、私は単純に実行(式expr)へのメソッドフックを追加し、デフォルトIQueryProviderを上書きすることができるだろう期待していました(ObjectQueryオブジェクトにはProvider {}属性がありますが、これはgetであり、あらかじめ定義されたクラスインスタンスを返します)。 新しいクエリスタック全体(ObjectSet、ObjectContextなど)を記述することなく、この方法で独自のカスタムIQueryProviderを使用する方法はありますか?EDIT
申し訳ありません:私は、可能な場合IQueryProviderを実装して1以外の任意の新しいクラスを追加する話ではありません。ラッパーは元本で結構ですが、私はラッパーをIObjectSetを実装するかのObjectQuery <T>をサブクラス化するつもりはないとしてのみからCreateQueryを最初に通過する上で使用されます:私が使用しているとして、この時点の後
public IQueryable<TElement> CreateQuery<TElement>(Expression expression)
{
return this.BaseProvider.CreateQuery<TElement>(expression);
}
ラッパー内の標準ObjectSetを使用すると、IQueryProviderは事前定義されたObjectSetに戻り、IQueryProviderはそれ以上の呼び出しをキャッチしません。
So:IQueryProviderを実装して使用する方法はありますか?ラッパーを追加せずにIQueryxxxオブジェクトのフルカスタムスタックを使用する必要がありますか?