アドホックIDのリストに基づいて多数のエンティティを効率的にロードする必要があります。残念ながら、Restrictions.In(Projections.Id(), ids)
のクエリーを実行するときに第2レベルのキャッシュが最初にチェックされるようには見えません。キャッシュをサポートする複数のアドホックNHibernateエンティティを効率的にロードする
ISession.Load
と似たようなものを探しています(1つではなく)IDのコレクションをとり、1番目または2番目のレベルのキャッシュで見つからないエンティティに対してINクエリを実行します。このようなものが存在しない場合、リフレクションに頼らずに2つのキャッシュを手動でチェックする最も簡単な方法は何ですか?
たSession.loadの何が問題になっている:
ここで力仕事をして非常に単純な
LoadHelper
クラスですか? –@DarrenKopp各IDに 'Load'を呼び出すと、複数のデータベースクエリが発行されます。私は既にキャッシュされたエンティティをスキップする単一のクエリが欲しい。 –
必ずしもそうではありません。 Loadはプロキシを返しますが、クエリは発行しません。クエリは、オブジェクト上の何かにアクセスしたときに実行されますが、アクセスされるまではデータベースにクエリは実行されません。 NHibernateにはクエリのバッチ処理もありますので、ロードを1000回呼び出すことができ、バッチサイズが200の場合はデータベースに対して50のクエリしか取得できません。 –