2011-12-05 54 views
0

NHibernate的我有兩個表家長和孩子......更新問題使用NHibernate

父 - >的parentid,名

兒童 - > childID的,名稱, parentId的

關係 - >一對多

如果我同時插入父表中的記錄我會插件ERT多條記錄在子表中沒有任何問題..

,但如果我更新子表中的記錄沒有更新,而不是其再次插入父記錄..

下面是我的映射代碼

家長:

HasMany(x => x.Child) 
       .Not.LazyLoad() 
       .Cascade.All(); 

兒童:References(x => x.Parent).Not.LazyLoad();

+1

向我們展示的代碼您正在使用修改父記錄。 – Vadim

回答

0

這很可能是小孩使用的Id生成器。 SaveOrUpdate不會將它們看作持久的,並嘗試插入它們。經常UnsavedValue("0")可以做的伎倆

此外它會更好地有反向設置告訴NH,Childs負責協會。

HasMany(x => x.Child) 
     .Not.LazyLoad() 
     .Inverse() 
     .Cascade.All(); 

// eg: in Parent class 
public void Add(Child child) 
{ 
    Childs.Add(child); 
    child.Parent = this; 
} 
0

我找到了解決辦法:

更改與下面的代碼父映射文件,它會刪除舊的子數據和子表中插入新記錄

HasMany(x => x.Child) 
       .Not.LazyLoad()    
       .Cascade.AllDeleteOrphan();