Половинное отображение NHibernate в одном направлении? - PullRequest
0 голосов
/ 27 февраля 2012

Я не могу четко сформулировать, что я хочу в названии, но по сути это возможно?

public class Employee {
    public Address address;
...

public class address {
...

Очень простая объектная модель, сотрудник, имеющий свойство объекта Address. В NHibernate, когда это сопоставлено, будет производиться что-то вроде:

table Employee
    EmployeeId
    AddressId
...

table Address
    AddressId
...

Так что пока все хорошо, у моей таблицы Employee есть столбец внешнего ключа в таблице Address, отлично. Что я хочу, тем не менее, когда я делаю get с NHibernate, чтобы он не включался в эту таблицу и не заполнял объект Address, а вместо этого создавал экземпляр объекта Address и заполнял только свойство AddressId.

Теперь, прежде чем я получу кучу отзывов о ленивой загрузке NHibernates, я уже знаю. Это скорее «возможно», а не «хорошая идея», потому что я уверен, что, вероятно, нет. Мне просто нравится видеть, насколько гибок NHibernate.

Ответы [ 3 ]

4 голосов
/ 27 февраля 2012

Один из способов - выставить AddressId как полностью сопоставленный элемент в классе Employee.Таким образом, вы можете получить AddressId из: -

Employee.AddressId

Тем не менее, ничего не загружено или дополнительные селекты отправляются в базу данных, если вы просто получаете идентификатор из: -

var addressId = Employee.Address.Id
1 голос
/ 27 февраля 2012

Это не имеет особого смысла для меня, так как у вас уже есть AddressId в качестве ссылки на адрес, поэтому создание экземпляра объекта просто для того, чтобы дать вам это, кажется ненужным.НО, может быть, вы хотите что-то вроде этого: http://ayende.com/blog/4378/nhibernate-new-feature-no-proxy-associations

изменить, после комментариев: также, такие вещи, как адрес могут быть сопоставлены как компоненты, возможно, это поможет с вашими требованиями.см. эту ссылку и Google, чтобы начать: http://ayende.com/blog/3937/nhibernate-mapping-component

0 голосов
/ 27 февраля 2012

Возможно, я неправильно понимаю вопрос, но вы спрашиваете, как ленивая загрузка NHibernate работает по умолчанию.Если вы получите экземпляр Employee, адрес будет прокси Address с установленным AddressId.Доступ к любому свойству, кроме AddressId, заставит NHibernate извлечь запись адреса.

...