NHibernate отображение одной таблицы на двух классах, с где выбор

Мы хотели бы отобразить единственную таблицу на двух классах с NHibernate. Отображение должно быть динамично в зависимости от значения столбца.

Вот простой пример для создания этого немного более ясным: у Нас есть таблица под названием Человек с идентификатором столбцов, Именем и Полом.

alt text

Данные из этой таблицы должны быть отображены или на классе Штекер или на классе Розетка в зависимости от значения столбца Sex.

alt text

В псевдокоде:

create instance of Male with data from table Person where Person.Sex = 'm';
create instance of Female with data from table Person where Person.Sex = 'f'; 

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

Действительно ли это возможно с NHibernate, или мы должны отобразить таблицу Person в плоский класс Человека сначала? Затем впоследствии мы должны были бы использовать пользовательский метод фабрики, который берет плоский экземпляр Человека и возвращает Розеточный или Штекерный экземпляр. Было бы хорошо, если NHibernate (или другая библиотека) может обработать это.

5
задан Rene Schulte 3 June 2010 в 09:27
поделиться

1 ответ

Это довольно частый случай для NHibernate. Вы можете отобразить целые иерархии классов в одну таблицу.

Вам необходимо указать значение дискриминатора.

<class name="Person">
  <id .../>

  <discriminator column="Sex" type="string" length="1" />

  <property name="Name"/>
  <!-- add more Person-specific properties here -->

  <subclass name="Male" discriminator-value="m">
    <!-- You could add Male-specific properties here. They 
     will be in the same table as well. Or just leave it empty. -->
  </subclass>

  <subclass name="Female" discriminator-value="f">
    <!-- You could add Female-specific properties here. They 
     will be in the same table as well. Or just leave it empty. -->
  </subclass>

</class>
9
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: