【问题标题】:EF6: Multiple added entities may have the same primary keyEF6:多个添加的实体可能具有相同的主键
【发布时间】:2018-02-08 15:52:00
【问题描述】:

我继承了一个数据库,我需要使用 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. 

我使用 DataContractSerializer 将 XML 反序列化为 POCO 对象。 我正在使用 xml 文档结构中的对象引用来定义关系。 POCO 对象是使用 NuGet 包中提供的 t4 脚本生成的(这两种反序列化器都不能很好地工作!)

我已经像这样装饰了 KitMemberTaxRaw:

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

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

KitMemberTaxRaw 表可以连接到 KitMemberKitMemberSaleReturnRaw 或 KitMemberSaleReturnRaw 表(但不能同时连接)。

EF 如何确定“关系的主体”?

【问题讨论】:

  • 那些属性是错误的。您将它们指向要使用的 FK id。您将无法对 2 个关系使用相同的密钥,因此您可能需要查看 TPH
  • 将外键装饰移动到 id 属性而不是集合。同样的错误。它不是对两个关系使用相同的键。税表连接到两个表中的一个或另一个。组合的许多部分是独立征税(或不征税)。该表用于层次结构的多个级别
  • 好的,也许你遇到了thisthis。否则需要查看导致问题的模型和命令。

标签: c# entity-framework entity-framework-6


【解决方案1】:

问题原来是 EF6 无法自动理解包含指向父级和可选祖父级链接的表。微软提供的模板生成的导航属性正确但不足。

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

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

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2016-06-14
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多