已在 ChangePasswordAsync() 上跟踪异常 {'Id'}

exception {'Id'} is already being tracked on ChangePasswordAsync()

我正在尝试更新身份密码,但我 运行 出现以下错误:

The instance of entity type 'TblUsers' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.

var changePasswordResult = await _userManager.ChangePasswordAsync(user: userData, currentPassword: Old, newPassword: New);

我该怎么做才能解决这个异常?

根据异常,userData 是您新建的身份用户 class 的一个实例,但您之前查询过同一用户(具有添加到 EF 对象的效果缓存和更改跟踪)。您现在正在尝试使用您更新的实例(未跟踪)而不是从数据库中提取的实例(已跟踪)来更改密码。

总而言之,如果您要修改一个实体,您应该始终使用从数据库中提取的实例来执行此操作,而不是您自己新建的实例。如果从数据库中提取的实例在此代码中,则使用它。如果不是,则再次将其从上下文中拉出(它将来自对象缓存,因此不需要额外的查询)。然后,使用该实例更改密码。