Пожалуйста, смотрите главу 8 для правил полиморфного отображения с NHibernate.
Короче говоря, вам потребуется столбец дискриминатора, чтобы указать, какой дискриминатор сохраняется в какой таблице. Вот пример из документации NHibernate, ИЛИ, если вы используете наследование, вам нужно будет только сопоставить ваши производные классы как подклассы и указать имя для каждого из них в сопоставлении классов базового типа.
<class name="IPayment" table="PAYMENT">
<id name="Id" type="Int64" column="PAYMENT_ID">
<generator class="native"/>
</id>
<property name="Amount" column="AMOUNT"/>
...
<joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
<joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
</class>
Вы можете заметить, что Платеж - это платеж, независимо от типа платежа. Таким образом, он отображается как IP-платеж. Затем подкатегоризовать в нескольких таблицах, которые представляют каждый тип платежа по столбцу дискриминатора.
Глава 8 - Полиморфное отображение