Я пытаюсь разобраться с кэшированием 2-го уровня в свободном доступе в NHibernate. До сих пор я сделал следующее:
- Добавлена ссылка на кеширование dll
Добавлено следующее при создании фабрики сессий:
c.SetProperty ("cache.provider_class", "NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache");
c.SetProperty ("cache.use_second_level_cache", "true");
c.SetProperty ("cache.use_query_cache", "true");
Добавлен Cache.ReadWrite (); против всех сущностей, которые я хочу кэшировать в файле ClassMap, например
открытый класс CountryMap: ClassMap {
public CountryMap () {
Таблица ( "Страна");
Id (x => x.CountryID);
Карта (x => x.CountryName);
Cache.ReadWrite ();
}
}
Теперь я предположил, что всякий раз, когда я пытаюсь получить сущность с Cache.ReadWrite () в отображении, он будет кешировать ее на время фабрики сессий (singleton). Однако, похоже, что это не так, поскольку база данных попадает при каждом запросе. Вот пара вопросов, которые у меня есть:
- Что делает свойство CacheMode в сеансе? Мой сеанс длится в течение веб-запроса. Должен ли я установить это при создании сеанса, и если да, то как его установить?
- Я где-то читал, что кеш не обновляется, если не сделан коммит. Я фиксирую данные только тогда, когда я вставляю / обновляю информацию в базе данных. Например, если у меня есть простая страница со списком стран, я бы взял все необходимые данные, но не зафиксировал бы данные, поскольку мне не нужно вносить какие-либо изменения. Означает ли это, что эти данные не будут кэшироваться? Я уверен, что прочитал это неправильно, поскольку это означало бы, что данные кэшируются только после добавления базы данных.
Буду признателен, если вы поможете. Спасибо