Я хочу использовать кэш второго уровня для моего запроса с активной загрузкой (запрос написан ниже тремя разными способами, я использую кеш запросов).У меня стандартная ассоциация один ко многим.Я установил кеш сущности для родителя, потомка и ассоциации между родителем и классом.И кэш 2-го уровня не работает, потому что у меня есть исключения.
Я написал свой запрос 3 разными способами:Критерии:
session.CreateCriteria<DictionaryMaster>().SetFetchMode("DictionaryItems", FetchMode.Eager)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.SetCacheable(true).SetCacheMode(CacheMode.Normal)
.List<DictionaryMaster>().ToList();
Когда я вызвал этот запрос, я получил исключение «Невозможно выполнить поиск [SQL: SQL недоступен]». Я думаю, что проблема существует, потому что я использую преобразование DistinctRootEntityResultTransformer.Я начну создавать свой собственный класс преобразования, и я надеюсь, что это сработает.
Запрос окончен:
session.QueryOver<DictionaryMaster>().Fetch(x => x.DictionaryItems).Eager
.TransformUsing(new DistinctRootEntityResultTransformer())
.Cacheable().CacheMode(CacheMode.Normal)
.List<DictionaryMaster>().ToList();
Исключение такое же, как и в критериях.
Linq:
session.Query<DictionaryMaster>().Fetch(x => x.DictionaryItems).Cacheable().CacheMode(CacheMode.Normal).ToList();
Здесь ошибка зависит от версии nhibernate в 3.1.ошибка https://nhibernate.jira.com/browse/NH-2587?page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-tabpanel но в версии 3.2 я получил это: https://nhibernate.jira.com/browse/NH-2856
Заранее спасибо