簡體   English   中英

由於一個或多個外鍵屬性不可為空,因此無法更改該關系。 插入新實體時

[英]The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When Inserting a new Entity

嘗試通過EF 6.1.1插入新實體及其關系時出現以下錯誤。

注意

我禁用了延遲加載和代理創建。

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

我已經仔細檢查了所有導航屬性,它們都被考慮在內,而不是null。

我還從對象圖中刪除了所有子實體,但仍然收到相同的錯誤。 與其他表/實體之間仍然存在FK關系,但我可以看到它們都已解決。 即在調用AddObject之后但在SaveChanges之前,我可以看到所有關系都已根據相關的FK ID解析/合並。 這些只是對現有數據的查找。

所以我不明白什么關系被設置為null或為什么

我還有其他保存得很好的實體,但是該特定實體無法正常工作。

我應該找什么?

我應該提供什么更多的信息來幫助解釋這個問題?

編輯1

根據Steve的建議和本文https://msdn.microsoft.com/en-us/data/dn469464.aspx#Log.Logging開啟了登錄功能,但唯一產生的語句是Opened connection,我沒有其他語句當我調用“保存更改”時產生。 我也運行了SQL事件探查器,這里也沒有產生語句!

編輯2

這是相關表的數據庫圖。 我嘗試為其創建記錄的主表是WorkOrders表。 用戶,RefList,Employees和ActivePolicies僅用於此上下文中的引用數據。

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

它還應將數據插入到WorkOrdersWorkOrderEmployeesWorkOrderEmployeeArtifactsWorkOrderEmployeePolicies中。 盡管如果我將這些添加到WorkOrders實體中,而僅創建不帶子級的WorkOrders實體,我仍然會遇到相同的錯誤。

在此處輸入圖片說明

預先感謝,皮特

因此,最終,這完全是我正在使用的上下文所附加的東西,而與我要保存的實體無關。

我是怎么發現的?

最后,我以為我會刪除與父實體WorkOrders之間的所有關系,然后將它們一個接一個地添加回去,以查看哪個破碎了……但是一旦這樣做,我仍然會遇到相同的錯誤。

深入研究我使用的上下文,我發現我在ModifyEntityStore中有一堆實體,在_entriesWithConceptualNulls中有相同數量的實體。 查看這些條目使我意識到,在收集保存WorkOrders實體所需的參考數據時,在代碼庫中進一步出現邏輯錯誤。

無論如何...汲取的教訓...請確保您檢查EF上下文中是否有其他內容並正在嘗試保存。

謝謝你的幫助

皮特

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

查看該圖,表中除Users之外的所有FK字段/列是否均為Id Id是否也可以作為子對象 /表的PK服務器?

太混亂了!

我相信要解決此問題,您應該重新設計表以具有命名的PK,這些PK的名稱為WorkOrdersID ,然后將UsersId列的名稱為FK。


然后在執行保存/提交之前,將對象的導航屬性設置為完整 人們不必直接擔心FK ID。 保存完成后,由於導航對象已填充,EF將填充ID的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM