Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate映射问题:类型为超类的属性_Nhibernate_Nhibernate Mapping - Fatal编程技术网

Nhibernate映射问题:类型为超类的属性

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"

我有一个NHibernate对象,它是一个超类(我们称之为“Super”),还有一个子类继承自它(我们称之为“Sub”)


我有一个单独的类(称为“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>