EF6:多个添加的实体可能具有相同的主键

问题描述:

我已经继承了数据库,我需要使用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://*.com/questions/26783934/multiple-added-entities-may-have-the-same-primary- key-on-database-seed)或[this](https://*.com/questions/11893673/c-sharp-unable-to-determine-the-principal-end-of-the-relationship)。否则,需要查看导致问题的模型和命令。 –

问题原来是EF6无法自动理解带有父母和可选父母的链接的表格。由Microsoft提供的模板生成的导航属性是正确的,但不足。

为了解决这个问题,我手动创建了它不理解的关系的临时主键。

注意:我使用的DataContractSerializer类创建了POCO对象,为实例化的导航属性创建了一个数组。我不得不更改模板来生成IList属性而不是ICollection <>。运行时出现错误,因为数组无法动态调整大小。