беглый nhibernate не кеширующий запросы в asp.net mvc - PullRequest
1 голос
/ 07 мая 2010

Я использую беглый nhibernate с asp.net mvc, и я не вижу ничего кэшированного при выполнении запросов к базе данных.В настоящее время я не использую реализацию кэша L2.

Должен ли я видеть запросы, кэшируемые без настройки внепроцессного кэша L2?

Отображение выглядит так:

 Table("ApplicationCategories");
 Not.LazyLoad();
 Cache.ReadWrite().IncludeAll();
 Id(x => x.Id);
 Map(x => x.Name).Not.Nullable();
 Map(x => x.Description).Nullable();

Пример Критерии:

 return session
          .CreateCriteria<ApplicationCategory>()
          .Add(Restrictions.Eq("Name", _name))
          .SetCacheable(true);

Каждый раз, когда я делаю запрос на категрию приложения по имени, оно попадает в базу данных, это ожидаемое поведение?

Ответы [ 2 ]

3 голосов
/ 07 мая 2010

Кэширование 1-го уровня происходит только на уровне сеанса, после того, как вы выберете этот сеанс, ваш кеш будет идти вместе с ним. Я предполагаю, что, как и большинство веб-приложений, вы будете выполнять сеанс по запросу; в этом случае вполне нормально каждый раз попадать в базу данных.

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

1 голос
/ 07 мая 2010

Вам необходимо включить кэш второго уровня и кеш запросов для кеширования запросов.

Это не имеет ничего *, связанного с кэшированием "уровня 1" (карта идентификации сеанса).

Если вы добавите следующие свойства в файл конфигурации NHibernate:

<property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<property name="cache.use_query_cache">true</property>

... БД не будет нажата при последующих вызовах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...