Microsoft Entity Framework Core:无法在对象中插入重复的密钥

时间:2019-03-08 11:11:46

标签: c# sql entity-framework-core

我正在尝试将父实体GuildMemberTeam更新为子实体GuildMember,Team和GuildMemberChallenge,而子实体GuildMemberChallenge也有子实体GuildMember和Challenge,但遇到以下内部异常:

  

内部异常1:SqlException:违反PRIMARY KEY约束   'PK_Challenge'。无法在对象“ dbo.Challenge”中插入重复的密钥。   重复的键值为(15ae8798-8567-457b-812a-5820cf7843e5)。的   语句已终止。

唯一的新实体是GuildMemberTeam,因为其他所有实体均已存在,但是将按照以下步骤检查并重新创建它们:

public void AddChallenge(Challenge challenge)
{
    if (challenge != null)
    {
        var id = challenge.Id == default(Guid) ? Guid.NewGuid() : challenge.Id;

        Challenge = new Challenge(id, challenge.Name, challenge.Phase, challenge.Type, challenge.Star, challenge.Gear, challenge.Level, challenge.Reward);
    }
}

这对所有其他实体都有效,除了我遇到错误的“挑战”。谁能帮我了解我在做什么错。

1 个答案:

答案 0 :(得分:0)

您正在创建新的挑战,但如果设置了现有挑战的ID,则将其传递。

var id = challenge.Id == default(Guid) ? Guid.NewGuid() : challenge.Id;

我认为,如果您创建新实体,则应始终创建新ID

var id = Guid.NewGuid();