6

Redisを利用する必要があるかもしれないキャッシュパターンを実装しようとしています。このパターンの問題は、Webファーム全体の問題を回避するために、Configuration.ProxyCreationEnabledを無効にしてから、後で再度有効にする必要があることです。

私がやりたいのは、IQueryableからDbContextにアクセスして、どこでもではなく1回だけこれを実行できるようにすることです。これを行う最も簡単な方法は、使用されているDbContextをキャッシュ拡張機能に渡すことですが、この投稿に出くわしました。

IQueryableの背後にあるDataContextにアクセスする

EF 4.1コードフィスト(DbSetなど)を使用して、上記のリンクと同様の方法でDbContextにアクセスする方法はありますか?

私はこれを自分で見つけようとしましたが、リフレクションを使用してIQueryableで参照されているDbSetから基本クラスを見つけるのに苦労しました。

4

1 に答える 1

7

IQueryableの背後にあるAccessDataContextで説明されているソリューションはハックであり、使用しないでください。これは、IQueryableを実装するクラスのプライベートメンバー変数の名前に依存しています。これは、実装クラスがEF / .NET Frameworkの将来のリリースで変更され、コードが破損する可能性があることを意味します。DbContextにはIQueryableインターフェースを介してアクセスできないため、IQueryableの実装についての仮定を避けるために、DbContextをキャッシング拡張機能に渡す必要があります。そうすることで、実装に埋め込むのではなく、キャッシングインターフェイスのDbContextへの依存関係をより明確に確立することもできます。

于 2011-09-05T16:09:42.993 に答える