Я пытаюсь реализовать пользовательский UserStore для моего приложения MVC 5, чтобы я мог делегировать команды базы данных в мой существующий проект базы данных.MVC 5 Identity 2 - пользовательские методы UserStore не вызываются
В таблицах моей базы данных используются целые ключи, поэтому я создал пользовательский UserManager, который наследует UserManager<User, int>
, а не только UserManager<User>
. По этой причине я также создал пользовательский UserStore, который реализует IUserPasswordStore<User, int>
вместо IUserPasswordStore<User>
.
Кратко:
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();
}
}
Теперь, кажется, что, когда я называю UpdateAsync на CustomUserManager
, он не проходит через мой обычай CustomUserStore
, а через реализацию или что-то какой-то по умолчанию. Проблема очевидна, потому что CustomUserManager.UpdateAsync()
возвращает Task<IdentityResult>
, а моя реализация в CustomUserStore
возвращает только Task
. Следовательно, ошибок нет или нет, но метод не вызывается. Я думаю, что IUserPasswordStore<User, int>
должен иметь какой-то метод, который возвращает UpdateAsync
Task<IdentityResult>
, но это не ...
С другой стороны, метод FindByIdAsync
работает нормально и вызывает метод в моем CustomUserStore
.
Я уверен, что проблема связана с наследованием классов с использованием пользовательского ключа (int в моем случае). Любой пример пользовательского UserStore, который я могу найти в Интернете, просто использует строковые ключи и не наследует IUserStore<User, int>
, а просто IUserStore<User>
.
Однако я не могу понять свою проблему. Возможно, я могу просто переопределить все методы в моем CustomUserManager
, но это похоже на работу, а не на решение. Возможно, это ошибка в структуре, я думаю, что пользовательские типы ключей по-прежнему относительно новы или даже альфа?
Можете ли вы это решить? – Anil