如何持久化引用共享子实体的实体

时间:2012-12-11 09:02:30

标签: c# nhibernate

我有以下场景:在运行时创建两个“父”实体。每个人都引用一个“共享”子实体。

这是一些伪代码:

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)

在另一个帖子上?

1 个答案:

答案 0 :(得分:0)

从评论中可以看出,只有参与者需要子项,因此在每个线程中使用session.Load<Child>(knownChildId)进行保存。这将为同一个对象创建2个不同的代理。

如果孩子尚未保存并设置了级联,则可能存在潜在的竞争条件

  • 在创建处理父项的线程之前保存共享的子项
  • lock(child) 之前
  • session.Save(father);
  • 在Child中引入对业务键的唯一约束,并在线程上处理DuplicateKeyException
相关问题