1

EntityFramework 6 で実行されている MVC 5 アプリがあります。

ページの 1 つは、ユーザーからのクエリに基づいて返される検索結果になります。データはそのように更新されておらず、検索結果がキャッシュされていれば問題ありません。

エンティティ フレームワーク コンテキストの依存性注入にユニティを使用しています。すべてのコントローラーで新しいインスタンスを与えるデフォルトのケースです(したがって、すべてのリクエストで)。

検索結果をキャッシュするにはどうすればよいですか?

すべてのコントローラーで新しいコンテキストが返されないように変更し、エンティティ フレームワークにオブジェクトをキャッシュさせる必要がありますか?

MVC でキャッシングを有効にして、そのままにしておくことはできますか?

4

1 に答える 1

1

Entity Framework extended nuget packageをご覧ください。EF クエリのキャッシュに使用します。EF5を使用していますが。うまくいかない場合は、ソースを取得していくつかの名前空間を調整するだけかもしれません

または、EF の結果を手動でキャッシュするだけです (リストに列挙して完全にロードされていることを確認してください)。フィルタリングせずにキャッシュするか (大きな変動がある場合)、フィルタリングされたバージョンをキャッシュして、それを HTTP キャッシュにキャッシュするだけです。データを取得するクエリ サービスを作成することもできます。クエリ サービスにデータをキャッシュするか、よりクリーンなコードが必要な場合は、デコレータを使用してクエリ サービスをラップし、キャッシュされたバージョンを提供できます。

リクエストごとのコンテキストは正しい設定です。すべてのリクエストには新しいコンテキストが必要です。長い間コンテキストを保持しようとしないでください。トラブルが後を絶ちません。

MVC のページ レベルの出力キャッシュを有効にすることもできます (そして、渡されたパラメーターに基づいてキャッシュするようにしてください)。

于 2013-09-19T21:40:33.090 に答える