NHibernate дискриминированные подклассы объединенного подкласса - PullRequest
6 голосов
/ 24 января 2011

Вот моя иерархия:

class abstract Entity { /*members*/ } // mapped to entity table
class abstract User : Entity { /*members*/ } // mapped to user table

class Employee : User { /*no members*/ } // no table, discriminator = "E"
class Contractor : User { /*no members*/ } // no table, discriminator = "C"

Вот мои отображения в двух отдельных файлах hbm:

<class name="Entity" table="entity" xmlns="urn:nhibernate-mapping-2.2">
  <id name="Id" column="id">
    <generator class="guid.comb" />
  </id>
  <property ... />
</class>

<joined-subclass name="User" extends="Entity" table="user">
  <key column="id" />
  <discriminator column="type" />
  <property ... />
  <subclass name="Employee"   discriminator-value="E" />
  <subclass name="Contractor" discriminator-value="C" />
</joined-subclass>

Следующее исключение, которое я получаю:

MappingException:Ошибка проверки XML: элемент 'join-subclass' в пространстве имен 'urn: nhibernate-mapping-2.2' имеет недопустимый дочерний элемент'criminator 'в пространстве имен' urn: nhibernate-mapping-2.2 '.

Что яотсутствует?Разве вы не можете сопоставить иерархию различаемых подклассов объединенного подкласса?

Ответы [ 2 ]

2 голосов
/ 24 января 2011

То, что вы хотите сделать, в настоящее время невозможно.

Проверьте http://www.nhforge.org/doc/nh/en/index.html#inheritance на наличие разрешенных конструкций.

2 голосов
/ 24 января 2011

присоединенный подкласс не имеет дискриминатора, потому что он находится в отдельной таблице.Вот как он знает, что такое подкласс.Если вы хотите использовать дискриминатор, вы должны использовать одну таблицу для всех ваших подклассов и использовать подкласс mapping

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...