nhibernate многие-ко-многим со специфическими для отношений свойствами - PullRequest
1 голос
/ 04 декабря 2009

Есть ли способ сопоставить отношение «многие ко многим» со свойствами каждого элемента в списке, относящемся к этому отношению? Фактический случай, который я пытаюсь раскрыть, таков:

Бизнес может быть связан со многими контактами, а контакт может быть связан со многими бизнесами. То, что я хочу сделать, это предоставить статус для отношений, например, активные или удаленные, а также дату, когда контакт был приглашен (или добавлен) в качестве контакта для этой компании. Так, скажем, контакт может быть активным для одного бизнеса, но в ожидании другого бизнеса.

Я знаю, что могу легко добиться этого, просто превратив отношение в реальную сущность и сопоставив сущность ассоциации с коллекциями, но я ДЕЙСТВИТЕЛЬНО ненавижу это делать. Просто кажется грязным, превращая что-то вроде отношений в настоящую сущность. Что мне интересно, так это то, есть ли способ сопоставить определенные свойства отношения каждому объекту. Итак, скажем, у меня есть список контактов для бизнеса. Каждый контакт в этом списке будет иметь статус, но при сопоставлении он будет делать этот статус специфичным для бизнеса. Я надеялся, что смогу сделать что-то подобное в бизнес-картографии:

<bag name="Contacts" table="BusinessContactAssociations" lazy="true" cascade="all">
  <key column="BusinessID"/>
  <many-to-many class="Contact" column="ContactID">
    <join table="BusinessContactAssociations">
      <key column="ContactID"/>
      <property name="InvitedDate"/>
      <property name="Status"/>
    </join>
  </many-to-many>
</bag>

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

У кого-нибудь есть какая-нибудь полезная магия мафиозного картографирования для меня?

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

Насколько я знаю, многие ко многим используются только для использования типичной таблицы соединения из двух столбцов. Учитывая, что вы хотите добавить свойства в отношение, вам лучше было бы отобразить его как два отдельных отношения «один ко многим» с классом соединения (ну, это нечто большее, потому что оно имеет свои собственные свойства, но вы понимаете, о чем я)

Обновление

Это не магия nHibernate, но ничто не мешает вам использовать класс соединения, который является закрытым или иным образом скрытым, и затем раскрывать свойства класса соединения из ваших основных классов.

0 голосов
/ 06 декабря 2009

Вы можете использовать <map> для получения троичных ассоциаций вместо вашего <many-to-many> отображения. Затем вы можете использовать <composite-index> для получения объектов-значений, используемых в качестве ключа словаря, если вы хотите, чтобы с отношением связывалось более одного свойства. Посмотрите сообщение в блоге Айенде для примера кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...