Как я могу отобразить наследование с подклассами - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть базовый класс, который НЕ является абстрактным, и два класса, которые основаны на этом классе, но имеют разные реализации того, как они вычисляют результат.Базовый класс также наследуется от абстрактного класса, который используется во многих различных местах системы, поэтому я не могу его изменить.

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

class BaseClass : CalculationBaseClass
{
   public virtual int Calculate()
   {
     ...
   }
}

class SpecializedClass : BaseClass
{
   public override int Calculate()
   {
      ...
   }
}

class HistoricClass : BaseClass
{
   public override int Calculate()
   {
      ...
   }
}

1 Ответ

0 голосов
/ 14 февраля 2012

Из документации NHibernate :

NHibernate поддерживает три основные стратегии отображения наследования.

  • таблица для иерархии классов

  • таблица на подкласс

  • таблица на конкретный класс

Вы бы выбрали одну из стратегийв зависимости от текущей структуры таблицы или если у вас нет устаревшей схемы, вы можете просто выбрать ту, которая наиболее подходит для вашей объектной модели (например, на основе сопоставленных свойств).В вашем случае, если вы используете «таблицу для иерархии классов», вы получите отображение, подобное этому:

<class name="CalculationBaseClass" table="MyTable">
    <id name="Id" type="Int64" column="ID">
        <generator class="native"/>
    </id>
    <discriminator column="TYPE" type="String"/>

    <subclass name="BaseClass" discriminator-value="BASE">
        ...
    </subclass>
    <subclass name="SpecializedClass" discriminator-value="SPECIALIZED">
        ...
    </subclass>
    <subclass name="HistoricClass " discriminator-value="HISTORIC">
        ...
    </subclass>
</class>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...