2012-06-28 83 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