身份:为什么user.roles为空?

Thu*_*3eR 6 c# asp.net identity asp.net-mvc-5

我有一个方法来获取我在我的数据库中的所有用户,简单地说我这样做:

var allUsers = context.Users.ToList();
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是,当我调试roles属性时它是空的:

在此输入图像描述

但是在dbo.UserRoles中:

在此输入图像描述

我在这里错过了什么?

编辑:

我的注册方法:

    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                UserManager.AddToRole(user.Id, model.UserRole.ToString());

                return RedirectToAction("Index", "Home");                 
            }
            AddErrors(result);
        }

        // If we got this far, something failed, redisplay form
        return PartialView("~/Views/Account/Register.cshtml",model);
    }
Run Code Online (Sandbox Code Playgroud)

编辑2:

获得这样的角色时:

var roles  = context.Roles.ToList();
Run Code Online (Sandbox Code Playgroud)

我可以看到所有角色,我还可以看到哪些用户具有特定角色:

在此输入图像描述

编辑3:

尝试转动懒惰装载

 this.Configuration.LazyLoadingEnabled = true;

 this.Configuration.LazyLoadingEnabled = false;
Run Code Online (Sandbox Code Playgroud)

仍然没有给我角色数据.

Tai*_*T's 5

您必须像这样加载要与 Include 一起使用的相关实体:

var allUsers = context.Users.Include(u => u.Roles).ToList();
Run Code Online (Sandbox Code Playgroud)

然后您应该能够访问用户角色。

关于该主题的更多信息在这里


Thu*_*3eR 1

到目前为止,我还无法按照我想要的方式解决这个问题。我做了一个有效的工作环境:

我创建了一个方法,让我获得每个单独的用户角色,如下所示:

    public string GetRole(string userId)
    {
        var role = UserManager.GetRoles(userId);

        return role[0];
    }
Run Code Online (Sandbox Code Playgroud)

在我原来的 Getuser 方法中,我调用了我最近开发的方法:

    public UserModel GetUsers()
    {
       var allUsers = context.Users.Include("Roles").ToList();

       var model = new UserModel
         {
            Users = allUsers.Select(x => new OverWatchUser
            {
                Email = x.Email,
                EmailConfirmed = x.EmailConfirmed,
                FirstName = x.FirstName,
                LastName = x.LastName,
                OrgId = x.OrgId,
                Role = GetRole(x.Id)

            }).ToList()

        };

        return model;
    }
Run Code Online (Sandbox Code Playgroud)

这给了我想要的数据,但我认为这是一个肮脏的修复,我希望有人能找到解决问题的正确方法。