我想我在 EF Core 3.1 中有这个工作(我很快就会确认)。
这是我的背景:
public class ApplicationDbContext :
IdentityDbContext<User> // User class is a simple class which inherits IdentityUser
{
public ApplicationDbContext(DbContextOptions objOptions) :
base(objOptions)
{
}
protected override void OnModelCreating(ModelBuilder objModelBuilder)
{
base.OnModelCreating(objModelBuilder);
objModelBuilder.Entity<User>(e =>
{
e.ToContainer(nameof(Users));
e.Property(i => i.ConcurrencyStamp).IsETagConcurrency();
});
objModelBuilder.Entity<IdentityRole>(e =>
{
e.ToContainer(nameof(Roles));
e.Property(i => i.ConcurrencyStamp).IsETagConcurrency();
});
}
}
...和一些中间件
var objIdentityBuilder = objServices.AddIdentityCore<User>(objOptions =>
{
// configure identity options
objOptions.Password.RequireDigit = false;
objOptions.Password.RequireLowercase = false;
objOptions.Password.RequireUppercase = false;
objOptions.Password.RequireNonAlphanumeric = false;
objOptions.Password.RequiredLength = 6;
});
objIdentityBuilder = new IdentityBuilder(objIdentityBuilder.UserType, objIdentityBuilder.Services);
objIdentityBuilder.AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
...以及我的问题的一个例子
var objUser = await _objUserManager.FindByIdAsync(id);
var objResult = await _objUserManager.ResetPasswordAsync(objUser, objModel.ResetToken, objModel.NewPassword);
if (!objResult.Succeeded)
// Error is "Optimistic concurrency failure, object has been modified."
任何想法为什么会抛出上述错误?我知道错误是说实体自上次保存以来已被修改,但您可以在我的示例中清楚地看到,它没有被修改。
非常感谢任何帮助。