Asp.net mvc MVC 5 Identity 2-未调用customer UserStore方法

Asp.net mvc MVC 5 Identity 2-未调用customer UserStore方法,asp.net-mvc,model-view-controller,identity,asp.net-identity-2,Asp.net Mvc,Model View Controller,Identity,Asp.net Identity 2,我正在尝试为我的MVC5应用程序实现一个自定义的UserStore,这样我就可以将数据库命令委托给我现有的数据库项目 我数据库中的表使用整数键,因此我创建了一个自定义UserManager,它继承了UserManager,而不仅仅是UserManager。因此,我还创建了一个自定义用户存储,它实现了IUserPasswordStore,而不仅仅是IUserPasswordStore 简而言之: public class CustomUserManager : UserManager<Use

我正在尝试为我的MVC5应用程序实现一个自定义的UserStore,这样我就可以将数据库命令委托给我现有的数据库项目

我数据库中的表使用整数键,因此我创建了一个自定义UserManager,它继承了
UserManager
,而不仅仅是
UserManager
。因此,我还创建了一个自定义用户存储,它实现了
IUserPasswordStore
,而不仅仅是
IUserPasswordStore

简而言之:

public class CustomUserManager : UserManager<User, int>
{
    public CustomUserManager(CustomUserStore store) : base(store) 
    {
    }
}

public class CustomUserStore : IUserPasswordStore<User, int>
{
    private readonly DbContext _db;

    public CustomUserStore(DbContext db)
    {
        _db = db;
    }

    public Task<User> FindByIdAsync(int userId)
    {
        return _db.users.SingleOrDefaultAsync(u => u.Id == userId);
    }

    public Task UpdateAsync(User user)
    {
        _db.Entry(user).State = System.Data.Entity.EntityState.Modified;
        return _db.SaveChangesAsync();
    }
}
公共类CustomUserManager:UserManager { 公共CustomUserManager(CustomUserStore商店):基本(商店) { } } 公共类CustomUserStore:IUserPasswordStore { 私有只读DbContext_db; 公共CustomUserStore(DbContext数据库) { _db=db; } 公共任务FindByIdAsync(int userId) { 返回_db.users.SingleOrDefaultAsync(u=>u.Id==userId); } 公共任务更新同步(用户) { _db.Entry(user.State=System.Data.Entity.EntityState.Modified; 返回_db.SaveChangesAsync(); } } 现在,当我在
CustomUserManager
上调用UpdateAsync时,它似乎并没有经过我的custom
CustomUserStore
,而是通过一些默认实现或其他方式。问题很明显,因为
CustomUserManager.UpdateAsync()
返回
Task
,而我在
CustomUserStore
中的实现只返回
Task
。因此没有错误或任何东西,但是没有调用该方法。我认为
IUserPasswordStore
应该有一些方法
UpdateAsync
返回
Task
,但它不

另一方面,
FindByIdAsync
方法工作正常,并在my
CustomUserStore
中调用该方法

我很确定这个问题是由于继承了具有自定义键类型(在我的例子中是int)的类造成的。我可以在网上找到的任何自定义UserStore示例都只使用字符串键,而不是继承
IUserStore
,而是继承
IUserStore


然而,我无法解决我的问题。也许我可以覆盖我的
CustomUserManager
中的所有方法,但这似乎是一个解决方案,而不是一个解决方案。这是框架中的一个错误吗?也许,我认为自定义密钥类型还是相对较新的,甚至在alpha中?

我知道这是一个老问题,但我昨天也遇到了同样的问题,在花了一些时间之后,我决定查看一下身份源代码和我发现的内容,差点让我的头撞到墙上

很简单,如果调用
UserManager.UpdateAsync
,在基类中,您将看到在
UserStore.UpdateAsync
之前发生了一个验证,在我的例子中,该验证失败(原因无关紧要)。因此,请友好地在您的类(控制器类)中检查UpdateSync的结果,这是一个
IdentityResult
,然后确保
成功
结果为假


Evdin

您是否能够解决此问题?