C# 如何正确更新(添加/更新/删除)实体(EF Core)的相关数据

C# 如何正确更新(添加/更新/删除)实体(EF Core)的相关数据,c#,entity-framework,.net-core,entity-framework-core,repository-pattern,C#,Entity Framework,.net Core,Entity Framework Core,Repository Pattern,我使用FluentAPI配置了以下简化模型,以使MS SQL表正常工作: CV: int ID string Title List<SkillCV> SkillsCVs // many-to-many junction/associative model/table to link the 2 tables SkillCV: int CvID int SkillID bool IsCore Skill: int ID string

我使用FluentAPI配置了以下简化模型,以使MS SQL表正常工作:

CV:
   int ID
   string Title
   List<SkillCV> SkillsCVs // many-to-many junction/associative model/table to link the 2 tables

SkillCV:
   int CvID
   int SkillID
   bool IsCore

Skill:
   int ID
   string Title
我使用的存储库模式被注入到API控制器中的服务中。因此,我将直接将逻辑简化为服务方法:

public async Task<int> UpdateAsync(CV cv)
{
   var cvDB = await context.Set<CV>()
               .Include(CV => CV.SkillsCVs)
                  .ThenInclude(skillCV => skillCV.Skill)
               .Include(CV => CV.User)
               .FirstOrDefaultAsync(CV => CV.Id == cv.Id);
   cvDB.Title = cv.Title;
   SkillCV[] skillsCVs = ...; // I get this with SemaphoreSlim, because it has concurrency issues with async lambda in LINQ method
   // assume that I have the "new" SkillCV array of entities that I need to replace the old ones with
   
   // cvDB.SkillsCVs = skillsCVs.ToList(); // many exceptions here
   UpdateSkills(cvDB, skillsCVs);
}
如何将旧的cvDB.SkillsCVs列表替换为新的SkillsCVs列表?当两个列表都是相等的、具有相同值的相同实体时,我已经获得了一个id为。。。例外如果旧的cvDB.SkillsCVs数组为空,则添加新实体时不会出现问题。如何解决状态未更改/已删除的问题。我需要一个方法,将更新一个新的列表列表列表

   public UpdateSkills(CV cv, List<SkillsCV> newSkillsCVs)
   {
      var oldSkillsCVs = cv.SkillsCVs;
      // how to replace oldSkillsCVs with newSkillsCVs
   }

你能帮我用这个方法吗?我已将所有内容都包含在简历中

您应该清除收藏CV.SkillsVCs,然后在其中填充新闻短片:

cv.SkillsCVs.Clear();
cv.SkillsCVs.AddRange(newSkillsCVs);

一定有更好的办法但我现在能想到的

ifcv.SkillsCVs!=null | | cv.SkillCVs.Count!=0 context.Entrycv.SkillsCVs.State=EntityState.Detached; cv.SkillsCVs=新闻杀手scvs;
非常糟糕的想法-这将从数据库中删除所有技能行并添加新技能,而您只想删除删除的技能并添加新技能;wait context.SaveChangesAsync;它显示:System.InvalidOperationException:无法跟踪实体类型“CV”的实例,因为另一个键值为“{Id:8}”但我要更新的CV具有Id14@DannyVarod:它仅删除cv的SKILLSCV,而不是数据库系统中的所有技能行。InvalidOperationException:未找到实体类型“List”。确保已将实体类型添加到模型中。为什么会这样?我错过了什么?