NHibernate父映射不会创建子外键

我刚学习NHibernate。 我一直在使用文档中的示例和stackoverflow,但我必须遗漏一些东西。

我有一个PARENT对象,它有一个CHILD集合。 没有PARENT,CHILD没有意义,因此数据库的FK设置为​​NOT NULL。 从CHILD到PARENT实现NHibernate工作正常,但我不需要这种关系方向。

相反,我试图实现拥有该关系的PARENT,但我一直得到一个数据库错误冒泡“无法将值NULL插入PARENT_ID”。 保存时,父母的ID和实体都不存储在CHILD中。

请参阅下面的代码示例。 请指教。

类文件

public class PARENT { private readonly IList _children = new List(); public virtual Id { get; set; } public virtual void AddChild(CHILD child) { _children.add(child); } } public class CHILD { public virtual Id { get; set; } } 

映射

                 

您必须在映射和对象模型中定义关系的两侧。 然后在映射中将一个声明为inverse="true" 。 所以像这样的东西应该工作:

类文件

 public class PARENT { private readonly IList _children = new List(); public virtual Id { get; set; } public virtual void AddChild(CHILD child) { _children.add(child); } } public class CHILD { public virtual PARENT Parent { get; set; } public virtual Id { get; set; } } 

映射

                  

您可能希望将AddChild方法更改为:

 public virtual void AddChild(CHILD child) { _children.add(child); child.Parent = this; } 

我有同样的问题,现在我只是删除了这种外键的非空约束。 由于数据库仅与NH一起使用,因此无法获得任何空值。

我认为NHibernate首先存储孩子。 然后它存储父。 因为您需要身份标识,所以在将父标记插入数据库之前,它没有主标记。 然后它需要事后更新孩子。

尝试另一个id生成器。 hilo是推荐的。 这也更快。