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