При использовании NHibernate, при каких обстоятельствах вы бы выбрали отображение коллекции, используя составной элемент, чтобы дать коллекцию объектов-значений, а не создавать полноценный объект и отображать его, используя один ко многим?
Возможно, у вас есть класс типа значений «PostalAddress» для представления адреса. Если у вас есть физическое лицо, и у каждого человека может быть много адресов, вы можете сопоставить эти отношения следующим образом (Вариант 1):
<bag name="Addresses" table="PersonAddress">
<key column="PersonID"/>
<composite-element class="PostalAddress">
<property name="StreetAddress"/>
<property name="Town"/>
<property name="City"/>
<property name="Postcode"/>
</composite-element>
</bag>
Или вы можете создать сущность PersonAddress, в которой есть типизированное свойство PostalAddress, и сопоставить адреса с привязкой «один ко многим» (вариант 2):
<bag name="Addresses">
<key column="PersonID"/>
<one-to-many class="PersonAddress"/>
</bag>
<class name="PersonAddress">
<id name="Id">
<generator class="native"/>
</id>
<component name="Address" class="PostalAddress">
<property name="StreetAddress"/>
<property name="Town"/>
<property name="City"/>
<property name="Postcode"/>
</component>
</class>
Есть ли причины не делать вариант 1? Предполагает ли тот факт, что таблица PersonAddress имеет столбец идентификаторов, предполагает, что она должна быть самой сущностью, поэтому используйте вариант 2?