1

我有父母/孩子关系,孩子有复合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 merge = Session.Merge(product);

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

4

1 回答 1

0

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

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

于 2010-06-21T01:45:12.000 回答