我有以下场景:在运行时创建两个“父”实体。每个人都引用一个“共享”子实体。
这是一些伪代码:
public class Parent
{
public Parent(Child child)
{...}
public Child { get; }
}
Child child = new Child();
Parent mother = new Parent(child)
Parent father = new Parent(child)
我希望能够独立地保存母和父实例,并且可能在不同的会话和事务中保存在单独的线程中。
如何使用NH处理子实体的保存?
好的,18次观看,没有评论......我想我需要补充一些说明。
我的映射定义了在持久保存Parent时应自动保留Child。
时,子实体会发生什么
session.Save(father)
在一个线程和上调用
session.Save(mother)
在另一个帖子上?
答案 0 :(得分:0)
从评论中可以看出,只有参与者需要子项,因此在每个线程中使用session.Load<Child>(knownChildId)
进行保存。这将为同一个对象创建2个不同的代理。
如果孩子尚未保存并设置了级联,则可能存在潜在的竞争条件
lock(child)
之前session.Save(father);