1

リクエストの開始時に開始し、リクエストの終了時に終了するキャッシュを有効にすることは可能ですか??

一部のテーブルでは、同じレコードを複数回選択しないキャッシュを有効にすると便利です。

たとえば、パーシャルを複数回レンダリングする場合、パーシャル内の SELECT は不要です。

次のスニペットを想定します。

@foreach(var row in orders)
    {
        @{Html.RenderPartial("Order");}
    }

部分順序は次のとおりです。

<div>
        @session.Query<Langs>.SingleOrDefault(el => el.Id == "EN').Description
    </div>
<div>
    @Model.OrderID
</div>

現在のセッションでのみ「Langs」テーブルをキャッシュするキャッシュを有効にすることはできますか?

キャッシュがない場合、リクエストごとに N (注文数) の SELECT があります。それ以外の場合、リクエスト キャッシュを使用すると、リクエストごとに 1 つの SELECT があります。

ありがとう!

4

2 に答える 2

2

あなたが言及したパーシャルなどのビュー内からデータベースクエリを実行しないでください。これはほとんどの場合、SELECT N+1 シナリオにつながります。

MVC パターンに従い、懸念事項を混在させないでください。すべてのデータベース クエリは、リポジトリ レイヤーから開始し、ビューが必要とするデータを表すモデル オブジェクトを設定し、そのモデルをビューに渡す必要があります。

プログラミングでは何でも可能であり、同じことを行う方法は常に何百万通りもありますが、ベスト プラクティスに従い、懸念事項を分離することで、自分自身から解放され、効率的で拡張可能で保守可能なアプリケーションを構築するのに役立ちます。

繰り返しますが、ビューがアクセスする必要があるデータが何であれ、MVC パターンのコントローラー側ですべてのクエリを実行します。それ以外の方法で行うと、懸念が混ざり合い、遭遇したような状況につながります。

于 2012-08-03T07:52:31.410 に答える
1

少なくとも 2 つの可能性があります。

  • クエリをキャッシュする
  • オブジェクトのLangsマッピングでキャッシュを有効にします

クエリ:

 @session.Query<Langs>.SetCacheable(true).SingleOrDefault(el => el.Id == "EN').Description

そしてキー hibernate.cache.use_query_cache = true を構成に追加します

于 2012-08-02T12:57:27.047 に答える