实体框架核心清除连接实体的嵌套集合并重新填充抛出错误

问题描述

我在 TeamMember 和 Skill 之间有一个 JoinEntity,称为 UserSkill。 TeamMember 对象具有一组 UserSkill 对象。当 TeamMember 被编辑时,可以选择添加删除技能,保存时我会尝试清除所有现有技能并添加在 Post Request 中提交的技能。但是,当我再次尝试添加技能集合时,清除它后,我收到一条错误消息,提示...

无法跟踪实体类型“UserSkill”的实例,因为 另一个具有键值 '{TechnicalSkillId: 5,TeamMemberId: 737}' 已被跟踪。当附加现有 实体,确保只有一个具有给定键值的实体实例 附上。

团队成员类

public class TeamMember{
    ...
    public List<UserSkill> Skills { get; set; }
}

用户技能类

public class UserSkill {
    public int TechnicalSkillId { get; set; }
    public int TeamMemberId { get; set; }

    [ForeignKey("TechnicalSkillId")]
    public Skill Skill { get; set; }

    [ForeignKey("TeamMemberId")]
    public User TeamMember { get; set; } 
}

尝试将编辑保存到用户或团队成员时的代码...

...
     db.UserSkill.RemoveRange(teamMember.Skills);
     db.TeamMembers.Update(teamMember);
     db.SaveChanges();
     foreach(var skill in db.Skills.Where(s => skills.Contains(s.Id.ToString())).ToList())
     {
        db.UserSkill.Add(new UserSkill() { TechnicalSkillId = skill.Id,TeamMemberId = teamMember.Id });
     }
...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)