在我的Web API的AccountController中,我可以访问UserManager,它提供了GetUserById()等方法。 我需要查询上下文并根据我扩展的属性搜索用户列表 - 例如,我需要添加一个"GetUsersByPhoneNumber()"方法。
AppUser 是我的扩展类,它继承了 IdentityUser。
我的构造函数看起来像这样。 我在网上找到的任何示例都显示了传入的上下文的不同之处。 我看不到在哪里可以访问数据库上下文。
public AccountController()
: this(Startup.UserManagerFactory(), Startup.OAuthOptions.AccessTokenFormat)
{
}
public AccountController(UserManager<AppUser> userManager,
ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
UserManager = userManager;
AccessTokenFormat = accessTokenFormat;
}
如何访问数据库上下文并根据添加到 AppUser 类的额外字段执行自己的查询?
UserManager 旨在与存储无关,如果您挂在构建 UserManager 时使用的用户存储本身,则可以下拉并访问 DbContext 本身的内容。
由于工厂创建了您的用户管理器,因此您可能需要对用户管理器进行子类化,以公开对默认情况下受保护的 IUserStore 的访问权限。 拥有存储后,您可以将其强制转换为UserStore并直接访问DbContext。
做同样事情的另一种可能更干净的方法是扩展UserManager并从UserManager本身公开一个新的GetUsersByPhoneNumber(),因为它已经可以访问您需要的所有内容。