2009-07-05 2 views
1

В настоящее время у меня есть следующие классы:NHibernate наследование вопрос

класса статьи с свойства ид, название и тело класса Вопрос: Статья с дополнительной собственности PostedBy

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

Я хотел бы знать, как мои сопоставления будут выглядеть для представления этого отношения. Оба класса находятся в разных сборках, и я бы очень не хотел ставить логику вопроса в класс/сопоставление статьи и ее сборку.

ответ

2

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

  1. таблица на иерархию классов
  2. таблица на подкласс
  3. таблица на класс бетона

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

<class name="Article" table="Article"> 
    <id name="Id" type="Int64" column="ArticleId"> 
     <generator class="native"/> 
    </id> 
    <property name="Title" column="Title"/> 
    <property name="Body" column="Body"/> 
    ... 
    <joined-subclass name="Question" table="Question"> 
     <key column="ArticleId"/> 
     <property name="PostedBy" column="PostedBy"/> 
     ... 
    </joined-subclass> 
</class> 

Однако это не соответствует вашему желанию держать отображения полностью отдельными. У вас могут быть полностью отдельные сопоставления, но это может иметь некоторые побочные эффекты, позволяющие Вопросу загружаться как обычную статью вместо Вопроса. При отдельном сопоставлении класс Article был бы прямым, как ожидалось. Класс Question будет включать соединение для доступа к свойствам, хранящимся в таблице статей.

<class name="Article" table="Article"> 
    <id name="Id" type="Int64" column="ArticleId"> 
     <generator class="native"/> 
    </id> 
    <property name="Title" column="Title"/> 
    <property name="Body" column="Body"/> 
    ... 
</class> 

<class name="Question" table="Question"> 
    <id name="Id" type="Int64" column="QuestionId"> 
     <generator class="native"/> 
    </id> 
    <property name="PostedBy" column="PostedBy"/> 
    ... 
    <join table="Article"> 
     <key column="ArticleId"/> 
     <property name="Title" column="Title"/> 
     <property name="Body" column="Body"/> 
    </join> 
</class> 
Смежные вопросы