Кэш запросов NHibernate не используется - PullRequest
0 голосов
/ 19 мая 2011

Я использую NH 2.1.2.4.

У меня есть настройка кэша запросов с Fluent NHibernate, например:

MsSqlConfiguration.MsSql2005
    .Cache(c => c.UseQueryCache()
            .ProviderClass(typeof(NHibernate.Caches.SysCache2.SysCacheProvider)))

Мои критерии выглядят так:

Session.CreateCriteria<Employee>()
    .Add(Restrictions.Eq("Username", username))
    .SetMaxResults(1)
    .SetCacheable(true)
    .UniqueResult<Employee>();

Однако, когда я использую SQL Profiler, я вижу, что запрос по-прежнему всегда выполняется к базе данных. Никаких вставок или обновлений в таблицу Employee не производится. Почему это не работает?

Мой класс отображения Employee указывает Employee как кэшируемый следующим образом:

public sealed class EmployeeDbMap : ClassMap<Employee>
{
    public EmployeeDbMap()
    {
        ....

        Cache.ReadWrite();
    }
} 

Кстати, я вижу, что по Stackoverflow есть ряд связанных вопросов, но ни на один из них нет хороших ответов: здесь и здесь .

1 Ответ

2 голосов
/ 19 мая 2011

Если вы также не кэшируете сущность Employee, для ее загрузки потребуется запрос, поскольку кеш запросов сохраняет результаты в виде идентификаторов.

Кроме того, кэш NHibernate работает, только если вы выполняете всю свою работу (включая запросы) внутри транзакций.

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