Nhibernate различают подклассы объединенного подкласса
-
24-10-2019 - |
Вопрос
Вот моя иерархия:
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-проверка ошибка: элемент «соединенного SUBClass» в пространстве имен «URN: Nhibernate-Mapping-2.2» имеет недопустимый детский элемент «Дискриминатор» в пространстве имен «Урн: Nhibernate-Mapping-2.2 '.
Что мне не хватает? Разве вы не можете отобразить дискриминационную иерархию подкласса объединенного SUBClass?
Решение
То, что вы хотите сделать, в настоящее время невозможно.
Проверять http://www.nhforge.org/doc/nh/en/index.html#inheritance для разрешенных конструкций.
Другие советы
У Cocing-Subclass нет дискриминатора, потому что он находится в отдельной таблице. Вот как он знает, что такое подкласс. Если вы хотите использовать дискриминатор, вы бы использовали одну таблицу для всех ваших подклассов, и вы будете использовать подкласс картирование