Хорошо, я понял это. Я выполнял свой именованный запрос, используя следующий синтаксис:
IQuery q = session.GetNamedQuery("MyQuery")
.SetResultTransformer(Transformers.AliasToBean(typeof(MyDTO)))
.SetCacheable(true)
.SetCacheRegion("MyCacheRegion");
(что, я мог бы добавить, это ТОЧНО , как документы NHibernate говорят вам, как это сделать ... но я отвлекся;))
Если вы используете создание нового преобразователя AliasToBean для каждого запроса, то каждый объект запроса (, который является ключом кеша ) будет уникальным, и вы никогда не получите попадание в кеш. Короче говоря, если вы сделаете это, как говорят документы nhib, то кеширование не сработает.
Вместо этого создайте свой преобразователь один раз в статическом члене var, а затем используйте его для своего запроса, и кеширование будет работать - вот так:
private static IResultTransformer myTransformer = Transformers.AliasToBean(typeof(MyDTO))
...
IQuery q = session.GetNamedQuery("MyQuery")
.SetResultTransformer(myTransformer)
.SetCacheable(true)
.SetCacheRegion("MyCacheRegion");