Nhibernate映射问题:类型为超类的属性
我有一个NHibernate对象,它是一个超类(我们称之为“Super”),还有一个子类继承自它(我们称之为“Sub”)Nhibernate映射问题:类型为超类的属性,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有一个NHibernate对象,它是一个超类(我们称之为“Super”),还有一个子类继承自它(我们称之为“Sub”) 我有一个单独的类(称为“Widget”),其属性类型为Super <class name="Widget" table="Widgets" lazy="true"> <id name="Id" type="System.Int32" column="NoteId"> <generator class="identity"
我有一个单独的类(称为“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中只有一条id为1的记录,而与之关联的子内容中则有一条单独的记录。在使用NHibernate分析器并调试我的代码之后,看起来NHibernate正在尝试实例化一个类型为子类的对象
它为什么这样做?我认为应该如何绘制地图有什么问题吗
显然,这是我实际工作的简化版本。我正在处理的对象具有更多不同类型的属性,因此可能我忽略了实际导致问题的原因,但我想确保我至少在基本层面上理解了问题。如果SuperThings中有一条Id=1的记录,SubId=1的子内容中有一条记录,根据您的映射,您有一个子实例是持久化的,所以NHibernate在尝试实例化它时是正确的 如果这不是您想要的,您应该重新阅读以查看替代方案
<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>