nhibernate - 合并集合的问题

时间:2010-06-20 23:59:55

标签: nhibernate merge parent-child composite-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>

<composite-id unsaved-value="none">
  <key-property name="ParentId"/>
  <key-property name="ChildId"/>
</composite-id>

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

在第2步中,我打电话 var merged = Session.Merge(product);

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

1 个答案:

答案 0 :(得分:0)

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

Child应该引用Parent,而不是Id。映射应为<key-many-to-one/>