流畅的NHibernate:未在单向关联中设置外键字段

时间:2010-11-29 09:54:57

标签: nhibernate fluent-nhibernate foreign-keys associations

我有一个包含ProbateCases表和Properties表的数据库。 Properties表有一个名为ProbateCaseId的ProbateCases表的外键,因此ProbateCases和Properties之间的关系是一对多的。

我的域层有一个ProbateCase类和一个Property类。 ProbateCase类具有如下定义的Properties集合:

private IList<Property> _properties = new List<Property>();
public virtual IEnumerable<Property> Properties { get { return _properties; } }
public virtual Property AddProperty()
    {
      Property property = new Property();
      _properties.Add(property);
      return property;
    }

Fluent NHibernate映射的相应部分如下所示:

HasMany(x => x.Properties).Where("Deleted = 0").KeyColumn("ProbateCaseId").Cascade.All().Access.CamelCaseField(Prefix.Underscore);

请注意,关联是单向的 - ProbateCase类有一组Properties,但Property类没有ProbateCase成员。

我发现查询工作正常 - NHibernate正在创建适当的SQL来获取具有相应ProbateCaseId值的Properties。

但是,当我保存我添加了新属性的ProbateCase时,INSERT SQL不包含外键字段的值 - 所以我得到一个SQL异常,抱怨外键中的NULL值: / p>

INSERT INTO AdminOverview.Properties (PropertyName) VALUES ('Name of property') -- Where the hell is the ProbateCaseId field value???

我是否应该期望NHibernate自己填充外键值,或者我还应该做些什么呢?

1 个答案:

答案 0 :(得分:3)

来自http://nhibernate.info/doc/nh/en/index.html#collections-onetomany

  

非常重要注意:如果关联的列声明为NOT NULL,则NHibernate在创建或更新关联时可能会导致约束违规。要防止出现此问题,必须使用标记为inverse =“true”的多值结束(集合或包)的双向关联。请参阅本章后面的双向关联讨论。