为什么我需要为孩子和父母添加关系?
Child child = Session.Get(1); Parent parent = Session.Load(1); parent.Children.Add(child); child.Parent = parent;
如果没有parent.Children.Add(child),如果使用inverse = true并且我不需要当前会话中的Children集合(每个Web请求的会话),它的工作完美。你总是为孩子和父母增加关系吗?
答案 0 :(得分:2)
我希望我能正确理解你。
class Parent { List Children {get;set;}
class Child { Parent Parent {get;set;}
ANS1。在这种情况下,Inverse告诉nhibernate框架将[Parent-Child]关系的控制机制留给Child(主要是关于哪个对象负责删除/更新Child)。对于Children属性的Inverse属性,Child负责自己,否则Parent负责删除Child。
ANS2。在大多数情况下,您不需要这两个属性(Children,Parent)(如果在Children上指定inverse = true,则需要它们)。它只取决于您想要获得的功能。
这是否简要回答了您的问题?
答案 1 :(得分:2)
设置child.Parent = parent
足以维持这种关系。
但是,如果您不将子项添加到集合中,您将无法利用级联,因此您必须明确地保留该子项。
另外,如果你没有设置其中一个边,你将有一个不一致的内存模型(因为除非你重新加载它,否则不会将子项添加到集合中。)