请帮我处理这种情况:
我意味着关掉了
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;
}
更新了所有简单字段,例如
Name
,LastName
。 但是这套 用户的角色没有更新 - 它保持不变。
我尝试使用
加载角色_context.Entry(updated).Collection("Roles").Load();
但我无法以任何方式更新此加载的集。
我搜索了类似的项目,但没有找到答案,认为它肯定已经存在。
我真的很抱歉可能会出现这种情况。
PS。我想补充一点,我根本不想删除或更新子实体。
许多现有答案都提示manually delete / add child entities to database in whole
,,但它不适合我。
角色是独立的实体,任何其他用户都可以使用它们。
我只是想更新数据库中的User_Role
表格,但我不能。