2011-02-06 4 views
0

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

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

Есть ли решение?

ответ

1

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

Дополнительная информация отсутствует here.

0

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

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