Как получить NHibernate ISession для кэширования сущности, не полученной по первичному ключу - PullRequest
2 голосов
/ 04 марта 2011

Моя сущность 'пользователь' почти всегда извлекается по имени пользователя, а не по его целочисленному суррогатному ключу. Поскольку имя пользователя не является первичным ключом, это означает, что ISession не будет его кешировать и повторно попадет в базу данных, чтобы получить те же данные.

Можно ли вообще настроить NHibernate для того, чтобы ISession кэшировал пользователей, извлеченных по имени?

Ответы [ 3 ]

2 голосов
/ 04 марта 2011

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

1 голос
/ 06 марта 2011

"Сеансовый кеш" - это на самом деле не кеш, а карта сущностей.

Я предлагаю включить кэш 2-го уровня для запросов с использованием специального провайдера, который хранит элементы в HttpContext.

1 голос
/ 04 марта 2011

Да, вы можете использовать элемент Natural-id NHibernate для достижения этой цели.См. http://ayende.com/Blog/archive/2009/06/23/nhibernate-ltnatural-idgt.aspx,. Пример - именно то, что вы просите.

...