NHibernate много-много картографирования - PullRequest
1 голос
/ 20 августа 2011

Итак, у меня есть ситуация, которую я пытаюсь сопоставить с NHibernate.Допустим, у нас есть следующая схема:

Question
- QuestionID
- QuestionText
- SiteID

Tag
- TagID
- TagName
- SiteID

QuestionTags
- QuestionID
- TagID

Для этого все будет в порядке:

<class name="Question" table="Questions">
      <key column="QuestionID" />
      <property name="QuestionText" not-null="true" />
      <property name="SiteID" not-null="true" />

      <set name="Tags" table="QuestionTags">
        <key column="QuestionID" />
        <many-to-many class="Tag" column="TagID" />
      </set>
</class>

<class name="Tag" table="Tags">
      <key column="TagID" />
      <property name="TagName" not-null="true" />
      <property name="SiteID" not-null="true" />
</class>

Однако я хочу добавить столбец SiteID в QuestionTags и добавить SiteID для каждого изего внешние ключи ...

(QuestionTags.QuestionID, QuestionTags.SiteID) -> (Questions.QuestionID, Questions.SiteID)
(QuestionTags.TagID, QuestionTags.SiteID) -> (Tags.TagID, Tags.SiteID)

... так что Вопросы и теги с разными идентификаторами сайта не могут быть связаны.Как я могу отобразить эту ситуацию?

1 Ответ

0 голосов
/ 21 августа 2011

Есть ли внешнее требование, чтобы в таблице QuestionTags был столбец SiteID? Вопрос и тег уже имеют SiteID, и модель домена может обеспечить невозможность назначения тега для вопроса с другим SiteID. Так что с точки зрения приложения вам это не нужно.

Таблица соединения / сопоставления для отношения «многие ко многим» поддерживает только два столбца. Имейте в виду, что эта таблица представляет не сущность, а только отношения между сущностями. Если вы добавите какие-либо дополнительные данные / столбцы, тогда он должен стать самостоятельным объектом с отношениями к двум другим объектам. См. В этом вопросе пример промежуточного объекта для поддержки другого столбца в таблице сопоставления.

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