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如何确定'关系的主要目的'?
答
问题原来是EF6无法自动理解带有父母和可选父母的链接的表格。由Microsoft提供的模板生成的导航属性是正确的,但不足。
为了解决这个问题,我手动创建了它不理解的关系的临时主键。
注意:我使用的DataContractSerializer类创建了POCO对象,为实例化的导航属性创建了一个数组。我不得不更改模板来生成IList属性而不是ICollection <>。运行时出现错误,因为数组无法动态调整大小。
这些属性是错误的。您将他们指向要使用的FK ID。你不能使用同一个键来处理两个关系,所以你可能需要查看[TPH](https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework -code-first-ctp5-part-1-table-per-hierarchy-tph) –
将外键修饰移到id属性而不是集合中。同样的错误。两个关系没有使用相同的密钥。税表连接到两个表中的一个或另一个。组合的许多部分都是独立征税的(或不是)。那张桌子是用在几个级别的折痕 – Jay
好的,也许你正在碰到[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)。否则,需要查看导致问题的模型和命令。 –