Сопоставление нескольких значений объекту Value в NHibernate

StackOverflow https://stackoverflow.com/questions/218337

  •  03-07-2019
  •  | 
  •  

Вопрос

я довольно новичок в NHibernate, и хотя я нахожу в Интернете тонны информации о NHibernate mapping, я слишком глуп, чтобы найти эту информацию.

Итак, проблема в том, что у меня есть следующая модель:

Datamodel

вот как бы я хотел, чтобы это выглядело.Один чистый человек, у которого есть два адресных свойства.

В базе данных я бы хотел сохранить это в одной таблице.Таким образом, строка Person будет содержать ShippingStreetname и столбец Streetname, один из которых сопоставлен с ShippingAddress .Streetname, а другой - с Address .StreetName

Я нашел статья о беглых интерфейсах, но до сих пор не понял, как это сделать с помощью конфигурации XML.

Заранее спасибо!

Обновить:Я сам нашел решение этой проблемы.Это может быть сделано через узел и работает довольно просто.

Чтобы добиться сопоставления Address и ShippingAddress, мне просто нужно было добавить следующее в

<component name="Address" class="Address">
  <property name="Streetname"></property>
  <property name="Zip"></property>
  <property name="City"></property>
  <property name="Country"></property>
</component>

<component name="ShippingAddress" class="Address">
  <property name="Streetname" column="ShippingStreetname" />
  <property name="Zip" column="ShippingZip" />
  <property name="City" column="ShippingCity" />
  <property name="Country" column="ShippingCountry" />
</component>
Это было полезно?

Решение

ОК.Я сам нашел решение.Ключом является конструкция в конфигурации XML, и она работает довольно хорошо.

Вот как это делается:

<component name="Address" class="Address">
  <property name="Streetname"></property>
  <property name="Zip"></property>
  <property name="City"></property>
  <property name="Country"></property>
</component>

<component name="ShippingAddress" class="Address">
  <property name="Streetname" column="ShippingStreetname" />
  <property name="Zip" column="ShippingZip" />
  <property name="City" column="ShippingCity" />
  <property name="Country" column="ShippingCountry" />
</component>

Другие советы

вы можете настроить это как два отношения. например.

<many-to-one name="ShippingAddress" class="Yournamespace.Address"/>
<many-to-one name="Address" class="Yournamespace.Address"/>

Вам даже не нужен идентификатор для адреса.Только подумайте, как дорого обходится поддержание удостоверения личности.У вас проблемы с параллелизмом, вам нужна уникальность и так далее.Это цель ValueObjects (не путайте с System.ValueObject, смотрите определение DDD для ValueObject).В этом случае Address является ValueObject, поэтому для него не требуется идентификатор.И если вам нужна коллекция адресов, вы сопоставляете ее как "" смотрите http://www.nhforge.org/doc/nh/en/index.html#collections-ofvalues.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top