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)
仍然没有给我角色数据.
您必须像这样加载要与 Include 一起使用的相关实体:
var allUsers = context.Users.Include(u => u.Roles).ToList();
Run Code Online (Sandbox Code Playgroud)
然后您应该能够访问用户角色。
关于该主题的更多信息在这里
到目前为止,我还无法按照我想要的方式解决这个问题。我做了一个有效的工作环境:
我创建了一个方法,让我获得每个单独的用户角色,如下所示:
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)
这给了我想要的数据,但我认为这是一个肮脏的修复,我希望有人能找到解决问题的正确方法。
| 归档时间: |
|
| 查看次数: |
1558 次 |
| 最近记录: |