Вот моя иерархия:NHibernate дискриминированных Подклассы объединенного-Подкласс
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: элемент «объединенный подкласс» в пространстве имен «urn: nhibernate-mapping-2.2» имеет недопустимый дочерний элемент «дискриминатор» в пространстве имен «urn: nhibernate-mapping-2.2».
Что мне не хватает? Можете ли вы не сопоставить иерархию подкласса с дискриминацией объединенного подкласса?
Итак, если я понимаю это право, я не могу смешивать разные стратегии наследования? В принципе, если каждый класс в конечном счете опускается из базового класса, такого как «Entity», тогда мне нужно выбрать одну стратегию, и это будет целая иерархия. Я понимаю, что не могу смешиваться на одном уровне, но есть ли шанс, что это будет поддерживаться на разных уровнях в будущем? –
@Travis, есть ли причина, по которой вы хотите иметь таблицу для Entity? – Vadim
Да; существует 6 полей, которые являются общими для всех моих сущностей [Id, IsActive, DateCreated, Creator, DateModified, Modifier]. Но даже если бы я не нуждался в Entity, Пользователь занял бы место в аналогичной ситуации, если мне нужно было продлить Подрядчика или Работника. –