【问题标题】:Entity Framework - How to fix the "Violation of PRIMARY KEY constraint" error?实体框架 - 如何修复“违反主键约束”错误?
【发布时间】:2016-07-14 14:49:08
【问题描述】:

我有一个班级,其中Team HomeTeam Guest 存在另一个班级。

public class Match
{
    [DataMember]
    public Guid Id { get; set; }
    [DataMember]
    public virtual Tour Tour { get; set; }

    [DataMember]
    public DateTime DateMatch { get; set; }

    [DataMember]
    public virtual Team Home { get; set; }
    [DataMember]
    public virtual Team Guest { get; set; }

    [DataMember]
    public virtual Result Result { get; set; }
}

当我尝试添加 Match:

违反主键约束“PK_dbo.Teams”。无法插入 对象“dbo.Teams”中的重复键。重复键值为 (06f67648-f904-4a4e-8ceb-33c204d8267c)。该声明已 终止。

我不知道如何在 Teams 已经存在的地方添加匹配

【问题讨论】:

  • 因为所有的导航属性都被添加了,你可能在一些导航属性中有相同的团队。如果您只想添加匹配项,请将这些导航属性设置为 null(保持 FK 不变),这样就不会再次添加。

标签: c# entity-framework code-first


【解决方案1】:

正如@DevilSuichiro 正确提到的,您不需要填写导航属性。为所有导航属性添加外键,如下所示:

public virtual int HomeId { get; set; }

[DataMember]
[ForeignKey("HomeId")]
public virtual Team Home { get; set; }

然后当您需要添加新的Match 时,只需填写HomeId 并将Home 属性设置为null,这样它就不会被读取到数据库中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2022-11-19
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    相关资源
    最近更新 更多