如何添加关系(nhibernate)

时间:2010-12-17 15:23:20

标签: nhibernate

为什么我需要为孩子和父母添加关系?

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请求的会话),它的工作完美。你总是为孩子和父母增加关系吗?

2 个答案:

答案 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足以维持这种关系。

但是,如果您不将子项添加到集合中,您将无法利用级联,因此您必须明确地保留该子项。

另外,如果你没有设置其中一个边,你将有一个不一致的内存模型(因为除非你重新加载它,否则不会将子项添加到集合中。)