我有父/子关系,而且孩子有复合身份
父
<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?..请帮忙。
答案 0 :(得分:0)
您的映射(和类模型)不正确。
Child应该引用Parent,而不是Id。映射应为<key-many-to-one/>