我有这种一对多的关联,我用“老”nhibernate或流利创造了zilions次数。但我无法使用代码映射
这些是
类 public class Parent
{
public virtual IList<Child> Children { get; set; }
}
public class Child
{
public virtual Parent Parent { get; set; }
}
没什么奇怪的
这些是映射类
对于家长:
Bag(x => x.Parent, m => m.Key(k => k.Column("Parent_id")));
子:
ManyToOne(x => x.Children, map => { map.Column("Parent_id"); map.Cascade(Cascade.All); });
如果我执行以下操作
var parent = new Parent();
parent.Children.Add(new Child());
session.SaveOrUpdate(parent);
我为父母提供了正确的INSERT,但它为任何添加的孩子提供了更新
UPDATE TableChildren
......
WHERE Id = 0 <-????
我错过了什么?我在敲我的头!!
答案 0 :(得分:8)
我看到两个问题。映射似乎已被反转(Bag
应该用于Children
,ManyToOne
用于Parent
。这里的基本设置也是inverse="true"
。
如此处详细记录:
孩子们应该这样映射:
Bag(x => x.Children, m =>
m.Inverse(true);
m.Cascade(Cascade.All);
m.Key(k => k.Column("Parent_id")));
父母喜欢这个
ManyToOne(x => x.Parent, map =>
{
map.Column("Parent_id");
});
inverse="true"
是指导NHibernate的一种方式,每个孩子都可以自我管理。因此,一旦将孩子添加到Children
集合中,我们也必须设置其Parent
!然后NHibernate将在一步中使用正确的引用来插入子进程。