nhibernate 3.3一对多映射代码更新子代而不是插入

我有这种一对多的关联,我用“老”nhibernate或流利创造了zilions次。 但我无法使用代码映射

这些是课程

public class Parent { public virtual IList 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 <-???? 

我错过了什么? 我在敲我的头!

我看到两个问题。 映射似乎是倒置的( Bag应该用于ChildrenManyToOne用于Parent )。 这里的基本设置也是inverse="true"

正如此处详细记录:

  • 按代码映射 – 设置和包 ,我们应该添加:
  • 按代码映射 – ManyToOne

儿童应该像这样映射:

 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将在一步中使用正确的引用INSERT子进程。