C# 如何使用AutoDetectChangesEnabled=false更新实体框架中的多对多

C# 如何使用AutoDetectChangesEnabled=false更新实体框架中的多对多,c#,.net,entity-framework,many-to-many,C#,.net,Entity Framework,Many To Many,请帮助我处理这种情况: 我有意关闭了AutoDetectChangesEnabled,然后加载我的 实体AsNoTracked()也有意义 在这种情况下,我无法更新多对多关系: 以下是更新方法的代码: public void Update(User user) { var userRoleIds = user.Roles.Select(x => x.Id); var updated = _users.Find(user.Id); if (updated == null)

请帮助我处理这种情况:

我有意关闭了
AutoDetectChangesEnabled
,然后加载我的 实体
AsNoTracked()
也有意义

在这种情况下,我无法更新多对多关系:

以下是更新方法的代码:

public void Update(User user)
{
  var userRoleIds = user.Roles.Select(x => x.Id);
  var updated = _users.Find(user.Id);

  if (updated == null)
  {
    throw new InvalidOperationException("Can't update user that doesn't exists in database");
  }

  updated.Name = user.Name;
  updated.LastName = user.LastName;
  updated.Login = user.Login;
  updated.Password = user.Password;
  updated.State = user.State;

  var newRoles = _roles.Where(r => userRoleIds.Contains(r.Id)).ToList();
  updated.Roles.Clear();
  foreach (var newRole in newRoles)
  {
    updated.Roles.Add(newRole);
  }

  _context.Entry(updated).State = EntityState.Modified;            
}
所有简单字段,如
Name
LastName
都已更新但是集合 用户的角色数量不会得到更新-保持不变。

我尝试使用

_context.Entry(updated).Collection("Roles").Load();
但我无法以任何方式更新此加载集

我搜索了类似的项目,但没有找到答案,认为它肯定已经存在

我真的很抱歉可能会有麻烦

另外,我想补充一点,我根本不想删除或更新子实体。 许多现有答案建议
手动删除/添加子实体到整个数据库中
,但它不适合我

角色是独立的实体,任何其他用户都可以使用它们


我只想更新数据库中的
User\u Role
表,但我不能。

您是否调用了
SaveChanges()
?我认为您添加的
User\u Role
不会被实体框架跟踪,因此更新实体不会反映到数据库中<代码>附加并尝试更新
\u context.User\u角色附加(yourEntity)然后尝试更新我找到了一种工作方式。我真的不知道它是否合理,但是_context.ChangeTracker.DetectChanges();作品我不知道是否可以手动进行同样的操作。当然我调用了SaveChanges,但后来在UnitOfWork Commit()方法中调用了。不附加、不更新子实体会有所帮助。Clild实体得到更新,但不更新子实体和父实体之间的关系
我认为要维护关系EF需要跟踪实体,请在不使用
NoTracking()的情况下尝试相同的方法。