Отображение нескольких значений дискриминатора в один класс по умолчанию в NHibernate - PullRequest
8 голосов
/ 14 августа 2010

У меня есть существующая таблица RoleType с данными. Я пытаюсь сопоставить эту таблицу в NHibernate, используя Таблица для иерархии классов :

<class name="IRoleType" table="RoleType">

  <id name="Id" column="RoleID">
    <generator class="native" />
  </id>

  <discriminator column="RoleID" />    

  <property name="Description" column="Description" />
  <!-- ... more properties ... -->

  <subclass name="RoleA" discriminator-value="1" />
  <subclass name="RoleB" discriminator-value="4" />
  <subclass name="RoleC" discriminator-value="7" />
</class>

Здесь IRoleType - это интерфейс с реализациями RoleA , RoleB и RoleC . Это работает. Но вот проблема -

Таблица содержит строки с «дополнительными» значениями дискриминатора (2,3,5,6), которые не сопоставлены с постоянным классом. Эти значения устарели в домене, поэтому создавать постоянные классы для каждого из них бесполезно. Но мы также не можем удалить их из базы данных.

Есть ли способ отобразить эти дополнительные строки в один класс "по умолчанию"? Если нет, то как еще я могу решить эту проблему?

Спасибо!

1 Ответ

18 голосов
/ 14 августа 2010

Вы можете сделать это, сопоставив эти значения с одним.Пример:

<discriminator
    formula="case when RoleID in (2,3,5,6) then 0 else RoleId end" />    
<subclass name="RoleA" discriminator-value="1" />
<subclass name="RoleB" discriminator-value="4" />
<subclass name="RoleC" discriminator-value="7" />
<subclass name="DefaultRole" discriminator-value="0" />
...