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

.net core 实体框架核心清除联接实体的嵌套集合并重新填充抛出错误,.net-core,entity-framework-core-2.1,.net Core,Entity Framework Core 2.1,我在TeamMember和Skill之间有一个名为UserSkill的联合实体。TeamMember对象具有UserSkill对象的集合。编辑团队成员时,可以选择添加或删除技能,保存时,我将尝试清除所有现有技能,并添加在Post请求中提交的技能。但是当我再次尝试添加技能集合时,在清除技能集合后,我得到一个错误,该错误表示 无法跟踪实体类型“UserSkill”的实例,因为 另一个键值为{TechnicalSkillId:5, TeamMemberId:737}'已被跟踪。附加现有文件时 实体,确

我在TeamMember和Skill之间有一个名为UserSkill的联合实体。TeamMember对象具有UserSkill对象的集合。编辑团队成员时,可以选择添加或删除技能,保存时,我将尝试清除所有现有技能,并添加在Post请求中提交的技能。但是当我再次尝试添加技能集合时,在清除技能集合后,我得到一个错误,该错误表示

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

团队成员类

public class TeamMember{
    ...
    public List<UserSkill> Skills { 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 });
     }
...
...
     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 });
     }
...