使用带有Identity for Core的EFCore

时间:2017-06-04 14:48:30

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

在过去的几天里,我一直在与Entity框架Core结合使用Identity系统。在揭示我的问题之前,这里有一些信息:

  1. 实体框架Core不支持延迟加载,这意味着我通过说明要包含哪些项目来使用预先加载
  2. 为了说明我想要检索的对象的哪些项目,我会覆盖每个存储库中的方法(检索到的属性现在是常量)
  3. 我正在使用的身份系统配置为:

    services.AddIdentity<ApplicationUser, ApplicationRole>(options =>
    {
        options.Cookies.ApplicationCookie.AutomaticChallenge = false;
    })  .AddUserManager<UserManager>()
        .AddRoleManager<RoleManager>()
        .AddUserStore<UserStore>()
        .AddRoleStore<RoleStore>()
        .AddEntityFrameworkStores<ApplicationDbContext, int>()
        .AddDefaultTokenProviders();
    
  4. 现在问题本身:

    我想使用身份系统来生成令牌,获取用户等但我无法在UserManager对象本身上急切加载,因为它的方法返回Task<ApplicationUser>和{{1方法本身需要Include()(进行急切加载)。能够使用预先加载和IQueryable的一般方法是什么?

2 个答案:

答案 0 :(得分:3)

最简单的方法是直接调用UserManger.Users。像这样:

C:/project/src/

答案 1 :(得分:0)

也许你想使用预先加载和UserManager如下:

    private async Task<ApplicationUser> GetSingleUser(Expression<Func<ApplicationUser, bool>> 
         predicate, params Expression<Func<ApplicationUser, object>>[] includeProperties)
    {
        IQueryable<ApplicationUser> query = _userManager.Users;
        foreach (var includeProperty in includeProperties)
        {
            query = query.Include(includeProperty);
        }

        return await query.Where(predicate).FirstOrDefaultAsync();
    }

希望这有帮助!