2010-01-05 112 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框架的要求,這只是一個問題。