Уникальность и наследственность столбца NHibernate - PullRequest
0 голосов
/ 23 декабря 2010

Рассмотрим файл сопоставления ниже. Оба класса имеют разное представление о том, что такое businessId, который обрабатывает объектная модель, но допустимо хранить его в виде простой строки в одном столбце. Я также хочу, чтобы у каждого из них были одинаковые отношения с набором Allocations, и это главная причина, по которой я хочу, чтобы они отображались с использованием наследования.

Несмотря на то, что шансы бизнес-идентификатора для Проекта, такого же, как у Учетной записи, сегодня являются удаленными, было бы идеально, если бы был способ сделать сочетание businessId и дискриминатора как части натурального id. Это недопустимо, возможно, по какой-то веской причине, которую я не вижу.

Могу ли я улучшить это отображение каким-то очевидным способом?

Приветствия
Berryl

<class name="ActivitySubject" table="ActivitySubjects" discriminator-value="BASE_CLASS">

<id name="Id" unsaved-value="0">
  <column name="ActivitySubjectId" />
  <generator class="hilo" />
</id>

<discriminator column="ActivitySubjectType" type="System.String" />

<natural-id mutable="true">
  <property name="BusinessId" length="25" not-null="true" />
</natural-id>

<property name="Description" length="75" not-null="true" />

<set access="field.camelcase-underscore" cascade="all-delete-orphan" inverse="true" name="Allocations">
  <key foreign-key="Allocations_Resource_FK">
    <column name="ActivityId" />
  </key>
  <one-to-many class="Allocation />
</set>

<subclass name="Account" discriminator-value="ACCOUNT" />

<subclass name="SProject" discriminator-value="PROJECT" />

Вот как я наконец получил оба столбца в одном и том же уникальном индексе:

<discriminator type="System.String"  >
  <column name="ActivitySubjectType" unique-key="ActivitySubjectTypeBusinessId" />
</discriminator>

<property name="BusinessId" length="25" not-null="true" node="1" unique-key="ActivitySubjectTypeBusinessId"/>

1 Ответ

3 голосов
/ 24 декабря 2010

Не используйте натуральные идентификаторы для первичных ключей. Я бы использовал синтетический ключ, сгенерированный базой данных идентификатор или GUID для первичного ключа и добавил бы уникальное ограничение для комбинации BusinessId и ActivitySubjectType.

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