アプリケーションには、CycleエンティティにマップされたCyclesという参照テーブルがあります。基本的に、NHibernate エンティティにマップされたほとんどのエンティティは、そのテーブルへの参照を保持します。通常、これらのエンティティには次のようなフィールドがあります。
- 開始サイクル
- 修正サイクル
- エンドサイクル
- サイクル
等
リクエストごとにセッションを使用していますが、クエリの大部分がCyclesテーブルに対して発行されていることをログで確認できます。これは、Cycle ID ではなく、Cycleタイプに属する他のプロパティによってクエリを実行する場合です。
Cycleタイプはほとんど不変で、Statusプロパティを持ち、実際にはこれがサービス クラス (CloseCycleService、Open など) によって変更できる唯一のプロパティです。また、Cycle は削除できませんが、挿入できます。
したがって、 Cyclesテーブルへのクエリの数を最小限に抑えたいと考えています。
アプリケーションキャッシュを使用してASP .NET内にキャッシュし、別の抽象化レイヤーを作成できますが、それを行う前に、それがNHibernateによって提供されるオプションであり、欠点は何ですか?
私が目にする唯一の問題はマルチスレッドです。Cycleはほとんど不変 (かつステートレス) ですが、2 つのリクエストが同じエンティティを同時に変更しようとすると、エラーが発生する可能性があります。でも・・・ほぼ無理です。
Cycles テーブルのすべてのコンテンツをキャッシュに保存するために NHibernate で何ができるか教えてください (ああ、そのテーブルのデータ数が少ないことにも触れていませんでした: 1 か月あたり 1 サイクルなので、現在は約 20 行です。月に 1 行増加します)、Cyclesテーブルに発行されるクエリを最小限に抑えますか?