2010-01-05 72 views
1

我已经得到了以下设置:NHibernate的父/子关系

public class ParentEntity 
{ 
    public ICollection<ChildEntity> {get; set; } 
} 

public class ChildEntity 
{ 
    // do i need to the parent here? 
} 

我设法保存ParentEntity和级联保存到被保存以及增加的子实体。但是在db表中,该子代的ParentId引用被设置为允许NULL。将其设置为NOT NULL时,保存失败,因为子表中的ParentId为NULL。

发生了什么事? ;)

+1

1.您不需要父级进行映射。也许你需要它来做其他事情? 2.如果你不告诉你如何做mappig,我们不能给你一个答案 – Paco 2010-01-05 20:49:46

回答

1

你应该在正常关系的双方地图,当你添加一个孩子的父母的集合,您还应该设置对孩子的父属性。通常你会写一个方法是这样实现这一点:

public void AddChild(ChildEntity child) 
{ 
    this.Children.Add(child); 
    child.Parent = this; 
} 

NHibernate的坚持基于ChildEntity类对应的属性子表中的ParentId列。一对多关系的定义仅允许NHibernate根据此列中的值从数据库加载集合

+3

你不这样做通常。当你为所有事情做这件事时,几乎所有的实体都会彼此耦合(应用程序变大时的spaggetti代码),并且不可能使用有界的上下文。一些关系需要是双向的,特别是当父母和孩子都是聚合根,但是当父母对孩子负责时,大多数情况下,单向关系会更好。 – Paco 2010-01-05 22:07:14

0

我遇到了同样的问题,需要使nHibernate公开外键列或通过收集在课堂上做到这一点。

问题:nHibernate创建集合对象(例如IList),并且无法覆盖或侦听基本集合的添加事件。

由于WCF RIA Services框架的要求,这只是一个问题。