2012-06-28 32 views
5

我有一个实体公司,有很多订单。我映射这些如下对方:NHibernate流利HasMany映射插入NULL外键

公司

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

订购

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

然而,当我为公司创造新的秩序,试图挽救它,我得到一个SQL错误:“不能将NULL值插入到'CompanyID'列'Orders'列中;列不允许为null,INSERT失败。”

(这是生成的SQL语句:INSERT INTO订单(名称,CompanyID)VALUES();选择SCOPE_IDENTITY()]?)

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

然而,与此相反,我期望CompanyID填写正确的ID,但在我的生活中,我无法让它工作。我尝试删除反转(行为完全没有改变),改变了级联,将参考设置为不可空。

我甚至把表中的列设为空,以幽默NHibernate。但是,这留给我一个孤儿订单,因为它确实创建订单记录,但留下了CompanyID NULL。

这是我testcode在那里我取得了新的订单:

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

更新的方式去无一不精。

无论如何,我希望有人在这里看到我在我的映射中做了什么错误。

在此先感谢。

回答

4

你忘了设定的公司为了

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

逆只告诉NH的顺序使用参考公司订单对象上插入标识上。

2

加入第一个!!!

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

.. w。 H。年。 ? .. – Tushar

+0

@Tushar我不知道!不记得了。 –

+0

O_O。这就是为什么你应该解释代码的答案。 :) – Tushar