【问题标题】:Accessing by DbContext vs UserManager通过 DbContext 与 UserManager 访问
【发布时间】:2018-10-01 02:35:00
【问题描述】:

使用 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(..)

【问题讨论】:

    标签: c# asp.net-core entity-framework-core asp.net-core-identity


    【解决方案1】:

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

    另一方面,通过使用UserManager,您只需将UserManager 的实现更改为使用HttpClient,以使用Web API 来查询用户、角色和其他需要的东西创建您的用户身份。

    UserManager通过IUserStore和其他一些接口封装了实现细节。我会避免直接查询任何 Identity 表,即使它是非常试探性的。

    【讨论】:

      【解决方案2】:

      如果您直接使用实体框架,主要缺点是如果您将存储更改为其他内容,则必须更改所有引用。

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

      1. 创建一个实现所需接口的类

        public class MyStore : IUserStore<ApplicationUser>, ... // many more
        { }
        
      2. 用你的替换实体框架存储:

        // default
        services.AddIdentity(...).AddEntityFrameworkStores();
        // yours
        services.AddIdentity(...).AddUserStore<MyStore>();
        

      如果您因为业务需求或 Entity Framework Core 中不可用的数据存储方法(或者甚至愿意从项目中删除 EF Core)而需要创建自定义存储,则最好使用UserManager 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-17
        • 2023-01-18
        • 1970-01-01
        • 2015-05-31
        • 2021-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多