nhibernate-合并集合的问题

nhibernate-合并集合的问题,nhibernate,merge,parent-child,composite-id,Nhibernate,Merge,Parent Child,Composite Id,我有父/子关系,子有复合id 母公司 <id name="Id" type="Int32"> <generator class="identity" /> </id> <set name="Children" table="CTable" cascade="all-delete-orphan" inverse="true" lazy="false" > <key column="ParentId"/>

我有父/子关系,子有复合id

母公司

    <id name="Id" type="Int32">
        <generator class="identity" />
    </id>

<set name="Children" table="CTable" cascade="all-delete-orphan" inverse="true" lazy="false" >
  <key column="ParentId"/>
  <one-to-many class="ChildrenClass"/>
</set>

孩子


我想要的是: 1) 从数据库获取父级,关闭会话,将父级从服务传递给客户端 2) 当父节点从客户端返回时,将其及其所有子节点保存在数据库中的新会话中

在步骤2中,我调用 var merged=Session.Merge(产品)

我使用Merge()是因为它似乎是使NHib处理子集合中添加/删除元素的唯一方法。。但是nHibernate重置了新添加的子项中的所有id-s,因此我有ParentId==0和ChildId==0的新子项。所以问题是-如何告诉NHibernate保留在Merge()中传递的实体的ID?。。请帮助。

您的映射(和类模型)不正确


孩子应该有对父母的引用,而不是Id。映射应该是一个

,谢谢你的回答!若我添加了对父对象的子引用,我怎么还能在父对象中维护子对象的集合?当Parent.Children和Child.Parent引用都存在时,会导致StackOverflowException(显然)。。我想在“家长”中收集孩子,这样我就可以浏览他们。。可能吗?“显然”?你错了。NHibernate完全支持双向关系。我建议你先看一下文件。迭戈,我设法让它工作了,不知道为什么第一次没有。谢谢
<composite-id unsaved-value="none">
  <key-property name="ParentId"/>
  <key-property name="ChildId"/>
</composite-id>