如果我创建一个新的Parent对象,然后向其添加新的子对象并尝试执行ISession.Merge(parent),那么对于子对象,我得到“没有给定标识符存在的行”异常。
如果在DB中找不到持久对象,那么合并是不是要创建一个持久对象?它只在我将父项与空子集合合并时才创建它。
我的映射可能有问题吗? 我在孩子身上有这个:
<many-to-one class="Parent fetch="join" name="Parent">
<column name="ParentId" />
</many-to-one>
这是在父母:
<bag fetch="join" inverse="true" lazy="false" name="Childs" mutable="true">
<key>
<column name="ParentId" />
</key>
<one-to-many class="Child" />
</bag>
答案 0 :(得分:3)
您可以使用cascade
或单独合并儿童:
<bag fetch="join" inverse="true" lazy="false" name="Childs" cascade="all">
...
</bag>
分开合并孩子:
foreach(Child child in parent.Children)
{
session.Merge(child);
}
var mergedParent = session.Merge(parent);
我实际上不确定如果孩子们已经在会话缓存中但父母不在会话缓存中会发生什么。您可能需要自己构建一个包含所有合并数据的实例。