NHibernate流畅的HasMany映射插入NULL外键

时间:2012-06-28 12:24:54

标签: c# fluent-nhibernate fluent-nhibernate-mapping

我有一个拥有多个订单的实体公司。我将这些映射为彼此:

公司

HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse();

顺序

References(x => x.Company).Column("CompanyID")

但是,当我为公司创建新订单并尝试保存它时,我收到一条SQL错误:“无法将值NULL插入列'CompanyID',表'订单';列不允许空值.INSERT失败。“

(这是生成的SQL语句:INSERT INTO Order(Name,CompanyID)VALUES(?,?); select SCOPE_IDENTITY()]])

这是一个逻辑错误,因为我确实将CompanyID设置为不可为空。

然而,反过来我预期的CompanyID会被正确的ID填充,但在我的生活中,我无法让它工作。我尝试删除Inverse(行为没有改变),更改了级联,将引用设置为不可为空。

我甚至让表中的列可以隐藏NHibernate。但是这给我留下了一个孤立的订单,因为它 创建订单记录但是将CompanyID留空了。

这是我的测试代码,我在那里订购了新订单:

Company test = RepositoryBase<Company>.GetById(1);
test.Orders.Add(new Order("test"));
RepositoryBase<Company>.SaveWithTransaction(test);

顺便说一句,更新都很顺利。

无论如何,我希望有人在我的地图中看到我做错了什么。

提前致谢。

2 个答案:

答案 0 :(得分:4)

您忘了在订单上设置公司

test.Orders.Add(new Order("test") { Company = test });

inverse只告诉NH,订单使用Order对象上的Company引用来插入Id。

答案 1 :(得分:2)

首先添加!!!

test.Orders.Add(new Order("test"){Company = test});