2015-10-08 25 views
1

當通過EF 6.1.1嘗試插入新實體和它的關係時,出現以下錯誤。該關係無法更改,因爲一個或多個外鍵屬性是不可空的。插入新實體時

注意

我有懶加載和禁用代理的創建。

該關係無法更改,因爲一個或多個 外鍵屬性不可空。當對 關係進行更改時,相關的外鍵屬性將設置爲空值。 如果外鍵不支持空值,則必須定義新的關係 ,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。

我仔細地檢查了所有的導航屬性,它們都被認爲是非空的。

我也從對象圖中刪除了所有的子實體,我仍然得到相同的錯誤。與其他表/實體仍有FK關係,但我可以看到它們都解決了。即在調用AddObject之後,但在SaveChanges之前,我可以看到所有關係都已根據相關的FK Id進行了解析/合併。這些只是對現有數據的查找。

所以我不明白的是被設置有什麼關係爲null,或者爲什麼

我有得救就好了其他實體,但這種特殊的實體是行不通的。

我該找什麼?

我應該提供哪些更多信息來幫助解釋該問題?

編輯1

已經把登錄按史蒂夫的建議,這篇文章https://msdn.microsoft.com/en-us/data/dn469464.aspx#Log.Logging但被產生的唯一語句打開的連接,我得到沒有產生其他的語句,當我打電話保存更改。我也運行SQL Profiler,並且沒有在這裏產生的語句!

編輯2

下面是相關表的數據庫圖。我試圖創建記錄的主表是WorkOrders表。用戶,RefList,Employees和ActivePolicies僅用於參考數據。

我通過分配Id屬性而不是導航屬性來設置FK屬性。

應該將數據插入工作訂單WorkOrderEmployeesWorkOrderEmployeeArtifactsWorkOrderEmployeePolicies爲好。雖然如果我做不是添加這些到WorkOrders實體和只創建WorkOrders實體沒有孩子我仍然得到相同的錯誤。

enter image description here

由於提前, 皮特

+1

檢查生成的SQL。 https://msdn.microsoft.com/en-us/data/dn469464.aspx –

+0

@SteveGreene謝謝,但沒有產生任何聲明。 EF必須在保存之前進行一些內部檢查?見上面的編輯。 – Pete

+0

您好@Pete,您能否請您顯示您的數據庫圖表以及您嘗試添加數據的表格。如何在插入時分配外鍵關係? –

回答

0

我通過指定標識屬性,而不是導航屬性設置FK屬性。在圖

來看,在比Users其他表中的所有FK字段/列名爲IdId也作爲PK的sub -object/table嗎?

這是令人困惑的!

我相信要解決這個問題,你應該重新構建表格,命名爲PK的命名爲WorkOrdersID,然後將UsersId列作爲FK。


做了保存/提交之前,然後設置對象的導航性能完全。人們不應該直接擔心FKs ID。一旦完成保存,EF將填充導航對象填充的ID值。

2

因此,最終它完全是被附加到我正在處理的上下文中,而與我試圖保存的實體無關。

我是怎麼知道的?

最後我以爲我會刪除所有與母公司實體WorkOrders的關係,然後將它們逐個添加回去看看哪一個被破壞......但是一旦我這樣做了,我仍然得到了同樣的錯誤。

深入研究我正在使用的上下文我發現我在modifiedEntityStore中有一堆實體,而在_entriesWithConceptualNulls中有相同數量的實體。查看這些條目讓我意識到,在收集保存實體所需的參考數據時,我在代碼庫的基礎上增加了一個邏輯錯誤。

總之......經驗教訓...確保您檢查EF上下文中還有什麼,並正試圖保存。

感謝所有幫助

皮特

相關問題