Asp.net mvc MVC 5 Identity 2-未调用customer UserStore方法
我正在尝试为我的MVC5应用程序实现一个自定义的UserStore,这样我就可以将数据库命令委托给我现有的数据库项目 我数据库中的表使用整数键,因此我创建了一个自定义UserManager,它继承了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
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时,它似乎并没有经过我的customCustomUserStore
,而是通过一些默认实现或其他方式。问题很明显,因为CustomUserManager.UpdateAsync()
返回Task
,而我在CustomUserStore
中的实现只返回Task
。因此没有错误或任何东西,但是没有调用该方法。我认为IUserPasswordStore
应该有一些方法UpdateAsync
返回Task
,但它不
另一方面,FindByIdAsync
方法工作正常,并在myCustomUserStore
中调用该方法
我很确定这个问题是由于继承了具有自定义键类型(在我的例子中是int)的类造成的。我可以在网上找到的任何自定义UserStore示例都只使用字符串键,而不是继承IUserStore
,而是继承IUserStore
然而,我无法解决我的问题。也许我可以覆盖我的
CustomUserManager
中的所有方法,但这似乎是一个解决方案,而不是一个解决方案。这是框架中的一个错误吗?也许,我认为自定义密钥类型还是相对较新的,甚至在alpha中?我知道这是一个老问题,但我昨天也遇到了同样的问题,在花了一些时间之后,我决定查看一下身份源代码和我发现的内容,差点让我的头撞到墙上
很简单,如果调用UserManager.UpdateAsync
,在基类中,您将看到在UserStore.UpdateAsync
之前发生了一个验证,在我的例子中,该验证失败(原因无关紧要)。因此,请友好地在您的类(控制器类)中检查UpdateSync的结果,这是一个IdentityResult
,然后确保成功
结果为假
Evdin您是否能够解决此问题?