我有一个ProbateCases表和一个属性表的数据库。属性表对ProbateCases表有一个名为ProbateCaseId的外键,所以ProbateCases和Properties之间的关系是一对多关系。流利NHibernate:外键字段没有设置在单向关联
我的域图层有一个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;
}
的功能NHibernate映射的相应部分看起来是这样的:
HasMany(x => x.Properties).Where("Deleted = 0").KeyColumn("ProbateCaseId").Cascade.All().Access.CamelCaseField(Prefix.Underscore);
注意,该协会是单向的 - 该ProbateCase类有一个属性集合,但Property类没有ProbateCase成员。
我发现查询工作正常--NHibernate正在创建适当的SQL来获取具有相应ProbateCaseId值的属性。
但是,当我保存一个ProbateCase时,我添加了一个新的属性,INSERT SQL不包含外键字段的值 - 所以我得到一个SQL异常抱怨外键中的NULL值:
INSERT INTO AdminOverview.Properties (PropertyName) VALUES ('Name of property') -- Where the hell is the ProbateCaseId field value???
我应该期待NHibernate填充外键值本身,还是有什么我应该做的?
谢谢迭戈。我之前看到过这个,但对我来说并没有什么意义。这不是FK字段是否可空的问题。我需要该字段由NHibernate设置,它不是。我不知道为什么。无论如何,我已经通过使该关联成为双向的方式来解决它(但是这是一个黑客攻击),因为从属性中访问ProbateCase从语义上讲没有意义。 – David 2010-11-29 13:09:20