Отображение нескольких первичных ключей NHibernate - PullRequest
5 голосов
/ 12 мая 2009

У меня есть стол под названием "Orderrow". Orderrow имеет составной первичный ключ (CPK) со следующими столбцами: OrderId, ProductId, RowNumber

OrderId и ProductId также являются внешними ключами, ссылающимися на таблицы Order и Product. RowNumber генерируется в приложении.

Мне было интересно, как это отображается в NHibernate, потому что я могу установить только 1 элемент id и 1 подэлемент генератора.

Ответы [ 3 ]

9 голосов
/ 11 октября 2009

Вот пример использования составного идентификатора в файле сопоставления NHibernate:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain.Model">

  <class name="Program" table="program">
    <composite-id>
      <key-property name="Id" column="id"></key-property>
      <key-property name="Prog" column="prog"></key-property>
      <key-property name="Site" column="site"></key-property>
    </composite-id>
    <property name="ActiveDate" column="active_date"/>
    <property name="Year" column="year"/>
  </class>

</hibernate-mapping>
6 голосов
/ 12 мая 2009

Существует свойство составного идентификатора, которое вы можете использовать в своем отображении класса вместо свойства идентификатора. Тем не менее, вы должны знать, что команда nHibernate настоятельно не рекомендует его использовать. Похоже, вы имеете дело с устаревшей базой данных, в которой у вас нет контроля над схемой. Таким образом, «составной идентификатор» специально для вашей ситуации.

Проверьте документацию NH для получения дополнительной информации: http://nhibernate.info/doc/nh/en/index.html

0 голосов
/ 16 мая 2009

Лично мне не нравится иметь составные первичные ключи в моих схемах таблиц базы данных, к тому же они обычно «трудны» для обработки любым преобразователем ORM, который я пробовал. Если мне нужно присвоить уникальную идентификацию строке в таблице (особенно если она представляет бизнес-объект), я предпочитаю использовать одно значение суррогатного идентификатора - GUID или целое число - если какое-либо из полей в таблице не ' Т подходит. Использование составного идентификатора всегда проблематично при написании запросов и объединений, поэтому моей обычной стратегией является использование суррогатного идентификатора (который не имеет никакого значения для бизнес-объекта, но для идентификации самого объекта) и наложения уникального ограничения на поля предыдущая цена за клик.

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