ActiveRecordBase.FindAll () не разрешает кэш первого уровня? - PullRequest
0 голосов
/ 06 февраля 2011

Кэш первого уровня NHibernate доступен при использовании одного сеанса.ActiveRecordBase.FindAll() каждый раз создает новый ISession.Так что такое следующее не может извлечь выгоду из кэша первого уровня:

void test1()
{
  Car.FindAll();
  Car.FindAll();
  Car.FindAll();
}

Есть ли какое-нибудь решение?

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Вызов нескольких FindAll() не вызывает несколько разных сеансов.Все они используют один и тот же сеанс.Причина, по которой FindAll() не может принести пользу, заключается в том, что она внутренне использует ICriteria, а сама ICriteria не может использовать кэш первого уровня.Кэш первого уровня доступен только для Load и Get.

Более подробная информация доступна здесь .

0 голосов
/ 06 февраля 2011

Не так долго, пока вы используете только кэш первого уровня (на основе сеанса). Вы можете, если вы включите кэш второго уровня.

Смотрите здесь информацию о жизнеспособности кэшей первого и второго уровня. http://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

...