nhibernate-循环引用未更新
我有两个相互参照的对象。从纯模式的角度来看,对象1可以有多个引用它的对象2的实例,但业务逻辑指定对象2的每个实例将引用对象1的唯一实例,反之亦然 例如:nhibernate-循环引用未更新,nhibernate,Nhibernate,我有两个相互参照的对象。从纯模式的角度来看,对象1可以有多个引用它的对象2的实例,但业务逻辑指定对象2的每个实例将引用对象1的唯一实例,反之亦然 例如: public class Object1 { public Guid Id {get;set;} public Object2 Object2 {get;set;} public Object1ClassMap : ClassMap<Object1> { // ...
public class Object1 {
public Guid Id {get;set;}
public Object2 Object2 {get;set;}
public Object1ClassMap : ClassMap<Object1>
{
// ...
References<Object2>(x=>x.Object2)
.Column("Object2Id")
.Cascade.SaveUpdate()
.Not.LazyLoad();
}
}
public class Object2 {
public Guid Id {get;set;}
public Object1 Object2 {get;set;}
public Object2ClassMap : ClassMap<Object1>
{
// ...
References<Object1>(x=>x.Object1)
.Column("Object1Id")
.Cascade.SaveUpdate()
.Not.LazyLoad();
}
}
我希望NHibernate能够检测到反向引用并自动执行
instanceOfObject2.Object1 = instanceOfObject1
对我来说,但这不会发生。我必须在两个方向手动更新。有没有办法避免这种情况?您需要从POCO对象而不是数据库关系的角度来考虑。obj1和obj2之间的关系不具有相反的关系。要建立强大的双向关系,您必须手动设置这些关系。您可能会发现编写两个set函数更容易,它们可以执行以下操作:
public class Object1(){
public Object2 Object2 { get; internal set; }
public void SetObject2(Object2 obj2){
Object2 = obj2;
obj2.Object1 = this;
}
}
public class Object2(){
public Object1 Object1 { get; internal set; }
public void SetObject1(Object1 obj1){
obj1.SetObject2(this);
}
}
根据您所描述的,您需要在对象之间建立一对一的关系。我无法比这篇文章更好地解释它: 本文使用XML映射,但我相信您将能够轻松地将其转换为流畅的方式 阅读,因为它可能会给你你想要的答案
在任何情况下,您都应该期望NHibernate在将两个对象保存到NHibernate的会话中后检测回引用。正如本文示例中所发生的那样。我尝试了一对一,但显然,只有当两个共享主键时,这才有效,而这两个都没有。
public class Object1(){
public Object2 Object2 { get; internal set; }
public void SetObject2(Object2 obj2){
Object2 = obj2;
obj2.Object1 = this;
}
}
public class Object2(){
public Object1 Object1 { get; internal set; }
public void SetObject1(Object1 obj1){
obj1.SetObject2(this);
}
}