У меня есть объект NHibernate, который является суперклассом (назовем его «Super»), и подкласс, который наследуется от него (скажем, он называется «Sub»).
<class name="Super" table="SuperThings">
<id name="Id" type="System.Int32" column="SuperId">
<generator class="identity" />
</id>
<joined-subclass name="Sub" table="SubThings" extends="Super" lazy="true">
<key column="SubId" />
</joined-subclass>
</class>
У меня есть отдельный класс (называемый "Widget") со свойством типа Super.
<class name="Widget" table="Widgets" lazy="true">
<id name="Id" type="System.Int32" column="NoteId">
<generator class="identity" />
</id>
<many-to-one name="SuperProperty" column="SuperId" class="SuperClass" />
</class>
Когда я получаю доступ к SuperProperty для экземпляра виджета, NHibernate пытается его лениво загрузить, но я получаю эту ошибку:
Найдено более одной строки с данным идентификатором: 1, для класса: Super
В SuperThings есть только одна запись с идентификатором 1 и отдельная запись в SubThings, связанная с ней. После использования NHibernate Profiler и отладки моего кода похоже, что NHibernate пытается создать экземпляр объекта, тип которого является подклассом.
Почему он это делает? Есть ли что-то не так с тем, как я думаю, это должно быть сопоставлено?
Очевидно, это упрощенная версия того, с чем я на самом деле работаю. У объектов, с которыми я работаю, гораздо больше свойств разных типов, поэтому, возможно, я не учел, что на самом деле вызывает проблему, но я хотел убедиться, что я понимаю вещи, по крайней мере, на базовом уровне.