現在、エンティティとエンティティのコレクションの両方をビジネス層で (.NET キャッシュを使用して) 自動的にキャッシュするアプリケーション フレームワークがあります。したがって、メソッド GetWidget(int id) はデータベースにアクセスする前にキー GetWidget_Id_{0} を使用してキャッシュをチェックし、メソッド GetWidgetsByStatusId(int statusId) は GetWidgets_Collections_ByStatusId_{0} を使用してキャッシュをチェックします。オブジェクトがキャッシュにない場合は、データベースから取得され、キャッシュに追加されます。
このアプローチは読み取りシナリオでは明らかに迅速であり、ブランケット アプローチは実装が迅速ですが、エンティティに対して CRUD 操作が実行されるときに大量のキャッシュ キーを削除する必要があります。追加のメソッドが追加されると、これは明らかにパフォーマンスに影響を与え、キャッシュの利点は減少します。
コレクションのキャッシュを処理するための代替アプローチに興味があります。NHibernate は、実際のエンティティではなく、コレクション内の識別子のリストをキャッシュすることを知っています。これは他の人が試したアプローチですか - 長所と短所は何ですか?
特に、パフォーマンスを最適化し、ボイラープレートで生成されたコードを介して自動的に実装できるオプションを探しています (独自のコード生成ツールがあります)。特定の状況のニーズを満たすために毎回手動でキャッシングを行う必要があると言う人もいると思いますが、ほとんどの場合自動的にキャッシングできるものを探しています。