NHibernate の 1 次キャッシュは、同じセッションを使用する場合に使用できます。ActiveRecordBase.FindAll()
毎回新しい を作成しISession
ます。したがって、次のような場合は、一次キャッシュから利益を得ることができません。
void test1()
{
Car.FindAll();
Car.FindAll();
Car.FindAll();
}
解決策はありますか?
NHibernate の 1 次キャッシュは、同じセッションを使用する場合に使用できます。ActiveRecordBase.FindAll()
毎回新しい を作成しISession
ます。したがって、次のような場合は、一次キャッシュから利益を得ることができません。
void test1()
{
Car.FindAll();
Car.FindAll();
Car.FindAll();
}
解決策はありますか?
複数を呼び出してFindAll()
も、複数の異なるセッションが強制されるわけではありません。それらはすべて同じセッションを使用します。FindAll()
利益を得られない理由は、内部的に使用しICriteria
、ICriteria
それ自体が一次キャッシュを使用できないためです。第 1 レベルのキャッシュは、Load
および でのみ使用できますGet
。
詳細については、こちらをご覧ください。
第 1 レベルのキャッシュ (セッションベース) のみを使用する限りではありません。二次キャッシュを有効にすれば可能です。
1 次および 2 次キャッシュの有効性については、こちらを参照してください。http://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx