2017-08-30 60 views
0

我已經繼承了數據庫,我需要使用EF6插入數據。我得到的錯誤:EF6:多個添加的實體可能具有相同的主鍵

DbUpdateException: Unable to determine the principal end of the 'POSModel.FK_KitMemberTaxRaw_KitMemberSaleReturnRaw_KitMemberSaleReturnRowId' relationship. Multiple added entities may have the same primary key. 

我反序列化XML使用的DataContractSerializer的POCO對象。 我使用xml文檔結構中的對象引用來定義關係。 (!不與所有或者解串器很好地工作):

[ForeignKey("KitMemberSaleReturnRaw")] 
public virtual KitMemberSaleReturnRaw KitMemberSaleReturnRaw { get; set; } 

[ForeignKey("KitMemberKitMemberSaleReturnRaw")] 
public virtual KitMemberKitMemberSaleReturnRaw KitMemberKitMemberSaleReturnRaw { get; set; } 

的KitMemberTaxRaw表可在POCO對象使用從NuGet包提供了一個T4腳本

我飾KitMemberTaxRaw像這樣產生的可以加入表KitMemberKitMemberSaleReturnRaw或KitMemberSaleReturnRaw(但不是兩者)。

EF如何確定'關係的主要目的'?

+0

這些屬性是錯誤的。您將他們指向要使用的FK ID。你不能使用同一個鍵來處理兩個關係,所以你可能需要查看[TPH](https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework -code-first-ctp5-part-1-table-per-hierarchy-tph) –

+0

將外鍵修飾移到id屬性而不是集合中。同樣的錯誤。兩個關係沒有使用相同的密鑰。稅表連接到兩個表中的一個或另一個。組合的許多部分都是獨立徵稅的(或不是)。那張桌子是用在幾個級別的摺痕 – Jay

+1

好的,也許你正在碰到[this](https://stackoverflow.com/questions/26783934/multiple-added-entities-may-have-the-same-primary- key-on-database-seed)或[this](https://stackoverflow.com/questions/11893673/c-sharp-unable-to-determine-the-principal-end-of-the-relationship)。否則,需要查看導致問題的模型和命令。 –

回答

0

問題原來是EF6無法自動理解帶有父母和可選父母的鏈接的表格。由Microsoft提供的模板生成的導航屬性是正確的,但不足。

爲了解決這個問題,我手動創建了它不理解的關係的臨時主鍵。

注意:我使用的DataContractSerializer類創建了POCO對象,爲實例化的導航屬性創建了一個數組。我不得不更改模板來生成IList屬性而不是ICollection <>。運行時出現錯誤,因爲數組無法動態調整大小。

相關問題