2010-01-20 145 views
1

我有一個包含子項列表的父類。父級和子級映射雙向has-many和父級cascade.all都打開。如果我在子列表中修改一個對象,但在父項中沒有屬性,nHibernate不保存該子項。如果我修改父級的屬性,一切都可以保存。這是由設計還是有一個特殊的屬性,我需要設置?nHibernate保存一對多

+0

您是否將子映射到父映射中,父映射在子映射中還是兩者都映射? – hackerhasid 2010-01-20 22:21:13

+0

兩者如下: (Parent) HasMany (x => x.Initiatives).KeyColumns.Add(「ProjectId」)。AsBag()。Cascade.SaveUpdate()。LazyLoad()。Inverse(); (Child) 引用(x => x.ParentProject).Column(「ProjectId」)。Cascade.SaveUpdate(); – 2010-01-20 22:40:09

+0

我相信你必須打電話給家長保存以保存孩子。 – snicker 2010-01-20 23:22:09

回答

0

這可能與您將孩子添加到集合中的方式有​​關。在雙向中,您必須在代碼中管理關係的兩個方面。考慮一下Fluent Nhibernate Getting Started Guide的例子。檢查商店實體。

一家商店有許多員工。 Store的員工財產是員工的集合。關係設置爲雙向。

商店有以下方法

public virtual void AddEmployee(Employee employee) 
{ 
    employee.Store = this; 
    Staff.Add(employee); 
} 

正如你所看到的,孩子的父母財產需要設置父對象。如果沒有這樣做,那麼Nhibernate將無法理解孩子的父母是誰,如果只修改了孩子並且調用了SaveOrUpdate(父母),則無法自動保存孩子。

你需要做到這兩點。

+0

我正在那樣做。 – 2010-01-20 23:27:59

0

我想通了。我正在使用各種列表器測試審計。當我連接到IFlushEntityListner時,它導致保存停止工作。 Geez令人沮喪。感謝大家!