如何使用AutoDetectChangesEnabled = false

时间:2016-02-15 12:29:25

标签: c# .net entity-framework many-to-many

请帮我处理这种情况:

  

我意味着关掉了AutoDetectChangesEnabled而我加载了我的   实体AsNoTracked()意义上也是。

     

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

以下是Update方法的代码:

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;            
}
  

更新了所有简单字段,例如NameLastName但是这套   用户的角色没有更新 - 它保持不变。

我尝试使用

加载角色
_context.Entry(updated).Collection("Roles").Load();

但我无法以任何方式更新此加载的集。

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

我真的很抱歉可能会出现这种情况。

PS。我想补充一点,我根本不想删除或更新子实体。 许多现有答案都提示manually delete / add child entities to database in whole,但它不适合我

  

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

我只是想更新数据库中的User_Role表格,但我不能。

0 个答案:

没有答案