【发布时间】:2010-06-20 23:59:55
【问题描述】:
我有父子关系,子有复合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)从数据库中获取父级,关闭会话,将父级从服务传递给客户端 2)当父母从客户端回来时,将其及其所有子项保存在数据库中,在一个新会话中
在第 2 步中,我调用 var 合并 = Session.Merge(product);
我使用 Merge() 因为它似乎是使 NHib 处理子集合中添加/删除的元素的唯一方法。但是 nHibernate 重置了新添加的子项中的所有 id-s,所以我有 ParentId == 0 的新子项和ChildId == 0。所以问题是 - 如何告诉 NHibernate 保留在 Merge() 中传递的实体的 ID?.. 请帮助。
【问题讨论】:
标签: nhibernate merge parent-child composite-id