首页 文章

通过DbContext和UserManager访问

提问于
浏览
1

使用UserManager或DbContext有缺点或优点吗?

如果我用这个:

public class UserManager<TUser> : IDisposable where TUser : class

public virtual Task<TUser> FindByIdAsync(string userId);

或者,如果我使用直接dbcontext,如:

var user = dbContext.Users.Where(x => x.Id == model.Id).FirstOrDefault();
// Login like this
 await HttpContext.SignInAsync(..)

2 回答

  • 3

    如果直接使用Entity Framework,主要的缺点是,如果将商店更改为其他内容,则必须更改所有引用 .

    ASP.NET Core Identity允许您分两步创建自定义商店:

    • 创建实现所需接口的类
    public class MyStore : IUserStore<ApplicationUser>, ... // many more
    { }
    
    • 由您更换实体框架商店:
    // default
    services.AddIdentity(...).AddEntityFrameworkStores();
    // yours
    services.AddIdentity(...).AddUserStore<MyStore>();
    

    如果由于业务需求或Entity Framework Core中不可用的数据存储方法(甚至愿意从项目中删除EF Core)而需要创建自定义存储,那么如果使用 UserManager 方法,则会更好 .

  • 2

    今天,您从数据库中查询用户 . 如果您决定将身份验证委派给授权服务器,该怎么办?我之前见过这种情况:人们决定创建一个Web API来处理身份验证/授权细节 . 如果您直接使用 DbContext ,则必须在使用它的任何地方进行更改 .

    另一方面,通过使用 UserManager ,您只需更改 UserManager 的实现以使用 HttpClient ,以使用Web API来查询创建用户身份所需的用户,角色和其他内容 .

    UserManager 通过 IUserStore 和其他一些接口封装了实现细节 . 我非常试探性的 .

相关问题