2010-03-29 5 views
2

Есть ли способ в NHibernate получить внешний ключ дочернего объекта, не получая дочерний объект?Nhibernate: Не извлекать при доступе к первичному ключу дочерних объектов

EG.

У меня есть User и UserRole. Могу ли я получить доступ к User.UserRole.UserRoleId, не вызывая другого попадания в базу данных для извлечения UserRole?

Я понимаю, что я могу настроить режим выборки на ожидание, и это не позволит ему снова попасть в базу данных, но теоретически это не нужно, так как в таблице пользователя есть UserRoldId.

Заранее благодарен.

+0

Вы можете сделать это с помощью прогнозируемого запроса, однако он становится беспорядочным. Не так чисто, как жадный выбор. – mxmissile

ответ

2

Является ли это поле отображаемым как не-ленивое?

Похоже, вы хотите ленивую загрузку. Когда «Много-к-одному» отображается как ленивый, создается прокси-сервер, в котором будет заполнено только поле идентификатора. После доступа к любому свойству, кроме id, он будет загружен из db.

+1

Вы правы. Арг, я думал, что это сработало так, но потом я нашел это не так, но я наполнил свое тестирование. Благодаря! – Alistair

-1

Возможно, вы можете добавить другое поле UserRoleId к объекту User? Звучит немного грязно, и вам нужно подключить его к синхронизации при изменении UserRole.

+0

Я подумал об этом, но я думаю, что уродство перевешивает прирост производительности. Я бы поставил режим выборки на большее, а не на это. – Alistair