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()的情况下尝试相同的方法。