使用带有 EF Core 5 和 IdentityDbContext

时间:2021-02-04 20:35:32

标签: c# .net-core azure-cosmosdb ef-core-5.0

我想我在 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."

任何想法为什么会抛出上述错误?我知道错误是说实体自上次保存以来已被修改,但您可以在我的示例中清楚地看到,它没有被修改。

非常感谢任何帮助。

0 个答案:

没有答案
相关问题