Мне не было известно об этой проблеме с отображением иерархии с помощью NHibernate. Однако, возможно, вы уже знаете, сообщаете ли вы об этой проблеме, вот как это следует сделать:
<class name="ICategory" table="Categories">
<id name="ID" column="IdCategory">
<generator class="identity">
</id>
<property name="Name"/>
<component name="Parent" class="ICategory"> <!-- class attribute is normally optional -->
<!-- Here, I would have some test to do to determine whether we have to list the properties -->
<!-- I would say no and this would makes sense to me, but without having tested it, I can't confirm. -->
</component>
<union-subclass="Category">
...
</union-subclass>
</class>
Если ваш класс объекта Category не предоставляет больше свойств, чем интерфейс ICategory, вы можете поместить все свойства в родительский элемент class , а затем объявить только свой последующий union подкласс объект внутри него.
Возможно, вы захотите обратиться к справочной документации NHibernate, глава 8 - Отображение наследования для получения более подробной информации по этому вопросу. Что касается сопоставления компонентов, вы хотите проверить Глава 7 - Сопоставление компонентов .
Что касается EF4, я не могу помочь, так как никогда не работал с ним. К сожалению.