使用nhibernate更新子表中的问题

时间:2011-12-05 13:47:22

标签: nhibernate

在nhibernate中我有父母和孩子两张桌子......

父级 - > parentid,名称

孩子 - > childid,姓名,parentid

关系 - > 一对多

如果我同时在父表中插入记录,我将在子表中插入许多记录而不会出现任何问题。

但如果我更新父记录,子表记录不会更新而不是再次插入..

以下是我的映射代码

家长:

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

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

我找到了解决方案:

使用以下代码更改父映射文件,它将删除旧子数据并在子表中插入新记录

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