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

C# 如何持久化引用了共享子实体的实体,c#,nhibernate,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) 我希望能够独立地保存父实例和

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

下面是一些伪代码:

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个视图,没有评论。。。我想我需要补充一些澄清

我的映射定义了当父对象被持久化时,子对象应该被自动持久化

当发生以下情况时,子实体将发生什么

session.Save(father)
在一个线程上调用,并且

session.Save(mother)

在不同的线程上?

从注释中可以看出,子线程仅用于引用,它被保存以在每个线程中使用
session.Load(knownChildId)
。这将为同一对象创建两个不同的代理

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

  • 在创建处理父线程之前保存共享子线程
  • 锁(子)
    会话之前。保存(父)
  • 在子级中的业务密钥上引入唯一约束,并在线程上处理DuplicateKeyException

这孩子是从哪里来的?保持对子线程的引用足够了吗,还是每个线程都改变了子线程?父线程不改变子线程,它只有一个对它的引用。这就像给一个产品分配一个类别,其中类别是动态创建的。。。