NHibernateの第1レベルのキャッシュは、同じセッションを使用する場合に使用できます。 ActiveRecordBase.FindAll()
は、毎回新しいISession
を作成します。そのような場合、第1レベルのキャッシュから利益を得ることはできません。ActiveRecordBase.FindAll()は第1レベルのキャッシュを許可していませんか?
解決方法はありますか?
NHibernateの第1レベルのキャッシュは、同じセッションを使用する場合に使用できます。 ActiveRecordBase.FindAll()
は、毎回新しいISession
を作成します。そのような場合、第1レベルのキャッシュから利益を得ることはできません。ActiveRecordBase.FindAll()は第1レベルのキャッシュを許可していませんか?
解決方法はありますか?
複数のFindAll()
を呼び出すと、いくつかの異なるセッションが強制されません。彼らはすべて同じセッションを使います。 FindAll()
が恩恵を受けることができない理由は、内部でICriteria
を使用し、ICriteria
自体が第1レベルのキャッシュを使用できないためです。ファーストレベルキャッシュはLoad
とGet
のために利用できます。
詳細はhereです。
第1レベルのキャッシュ(セッションベース)を使用している限りではありません。 2次キャッシュを有効にすることができます。
第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