我正在尝试更新身份密码,并且遇到以下错误:
无法跟踪实体类型'TblUsers'的实例,因为已经跟踪了另一个具有相同键值的{'Id'}实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用'DbContextOptionsBuilder.EnableSensitiveDataLogging'查看冲突的键值。
var changePasswordResult = await _userManager.ChangePasswordAsync(user: userData, currentPassword: Old, newPassword: New);
我该如何解决此异常?
答案 0 :(得分:2)
基于例外情况,userData
是您所创建的Identity用户类的实例,但是您先前已经查询了该用户(具有添加到EF对象缓存和更改跟踪的作用)。现在,您尝试使用新实例(未跟踪)而不是从数据库中提取的实例(即)来更改密码。
总之,如果要修改实体,则应始终使用从数据库中拉出的实例来进行修改,而不是自己进行更新。如果从数据库中提取的实例在此代码中,请使用该实例。如果不是,则再次将其从上下文中拉出(它将来自对象缓存,因此不需要其他查询)。然后,使用该实例更改密码。