在nhibernate中我有父母和孩子两张桌子......
父级 - > parentid,名称
孩子 - > childid,姓名,parentid
关系 - > 一对多
如果我同时在父表中插入记录,我将在子表中插入许多记录而不会出现任何问题。
但如果我更新父记录,子表记录不会更新而不是再次插入..
以下是我的映射代码
家长:
HasMany(x => x.Child)
.Not.LazyLoad()
.Cascade.All();
儿童: References(x => x.Parent).Not.LazyLoad();
答案 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();