2011-12-05 47 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();