Fluent NHibernate:未在单向关联中设置外键字段

Fluent NHibernate:未在单向关联中设置外键字段,nhibernate,fluent-nhibernate,foreign-keys,associations,Nhibernate,Fluent Nhibernate,Foreign Keys,Associations,我有一个数据库,有一个ProbateCases表和一个Properties表。Properties表有一个名为ProbateCaseId的ProbateCases表的外键,因此ProbateCases和Properties之间的关系是一对多的 我的域层有一个ProbateCase类和一个Property类。ProbateCase类有一个属性集合,定义如下: private IList<Property> _properties = new List<Property>()

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

我的域层有一个ProbateCase类和一个Property类。ProbateCase类有一个属性集合,定义如下:

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;
    }
请注意,关联是单向的-ProbateCase类具有属性集合,但属性类没有ProbateCase成员

我发现查询工作很好——NHibernate正在创建适当的SQL以获得具有适当ProbateCaseId值的属性

但是,当我保存已添加新属性的ProbateCase时,INSERT SQL不包含外键字段的值-因此我收到一个SQL异常,抱怨外键中有空值:

INSERT INTO AdminOverview.Properties (PropertyName) VALUES ('Name of property') -- Where the hell is the ProbateCaseId field value???
我应该期待NHibernate填充外键值本身,还是应该做其他事情?

来自:

非常重要的注意:如果关联的列被声明为NOTNULL,那么NHibernate在创建或更新关联时可能会导致违反约束。为了防止此问题,必须使用双向关联,将多值端(集合或包)标记为reverse=“true”。请参阅本章后面关于双向关联的讨论


谢谢,迭戈。我以前见过这个,但对我来说没什么意义。这不是FK字段是否可以为空的问题。我需要由NHibernate设置字段,但它不是。我不知道为什么。无论如何,我已经通过双向关联修复了它(如图所示),但这是一种黑客行为,因为从财产中访问遗嘱认证案例在语义上没有任何意义。如果它让你感觉更好,每个人都认为这应该在不双向关联的情况下工作(据我所知,它在Java Hibernate中已经运行了一段时间)。这只是当前实现的一个限制。感谢您的澄清。为了其他读者的利益,您可以在NHibernate中进行单向关联,但只能采用两种可能的方式之一。您必须进行“类a有一个类B”关联,而不是“类B有多个类a”关联。
INSERT INTO AdminOverview.Properties (PropertyName) VALUES ('Name of property') -- Where the hell is the ProbateCaseId field value???