Nhibernate 处理父/子关系的最有效方法

Nhibernate 处理父/子关系的最有效方法,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我想在添加关系时减少对数据库的往返 public class Parent { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList Children { get; set; } //inverse = true; cascade = all } public class Child { public virtual in

我想在添加关系时减少对数据库的往返

public class Parent { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList Children { get; set; } //inverse = true; cascade = all } public class Child { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual Parent Parent { get; set; } } Child child = Session.Get(1); Parent parent = Session.Load(1); child.Parent = parent; Session.Flush(); 公共类父类 { 公共虚拟整数Id{get;set;} 公共虚拟字符串名称{get;set;} 公共虚拟IList子项{get;set;}//inverse=true;cascade=all } 公营儿童 { 公共虚拟整数Id{get;set;} 公共虚拟字符串名称{get;set;} 公共虚拟父级{get;set;} } Child=Session.Get(1); Parent=Session.Load(1); child.Parent=Parent; Session.Flush(); 它的工作,我只有选择为儿童和更新为儿童。但它不适用于二级缓存

=== Session 1 === Parent parent = Session.Get(1); var count = parent.Children.Count; === Session 1 === === Session 2 === Child child = Session.Get(1); Parent parent = Session.Load(1); child.Parent = parent; Session.Flush(); === Session 2 === === Session 3 === Parent parent = Session.Get(1); var count = parent.Children.Count; //INCORRECT! Session 2 didn't update collection. === Session 3 === ==会话1=== Parent=Session.Get(1); var count=parent.Children.count; ==会话1=== ==会话2=== Child=Session.Get(1); Parent=Session.Load(1); child.Parent=Parent; Session.Flush(); ==会话2=== ==会话3=== Parent=Session.Get(1); var count=parent.Children.count//不对!会话2未更新集合。 ==会话3===
如果我在会话2中添加parent.Children.add(child),NHibernate会选择parent,但为什么?我想是在头顶上

好吧,当我处理父/子关系时,例如类别,我有一个unite类别,其中包含示例ID、Name和ParentID,使用它你可以定义任何级别的父/子关系

你的意思是什么?child.parentId=parentId?它也不适用于二级缓存。