Мы хотели бы отобразить единственную таблицу на двух классах с NHibernate. Отображение должно быть динамично в зависимости от значения столбца.
Вот простой пример для создания этого немного более ясным: у Нас есть таблица под названием Человек с идентификатором столбцов, Именем и Полом.
Данные из этой таблицы должны быть отображены или на классе Штекер или на классе Розетка в зависимости от значения столбца Sex.
В псевдокоде:
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 (или другая библиотека) может обработать это.
Это довольно частый случай для 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>