Net Core Identity 每个用户一个角色

Net Core Identity one role per user

我想每个 MyIdentityUser 只有一个 MyIdentityRole。我当前的代码:

public class MyIdentityUser: IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Image { get; set; }
    public string PersonalNumber { get; set; }
    public string Address { get; set; }
    public bool IsDeleted { get; set; }
    public string MyIdentityRoleId { get; set; }
    public MyIdentityRole MyIdentityRole { get; set; }
}

public class MyIdentityRole: IdentityRole
{
    public List<MyIdentityUser> MyIdentityUsers { get; set; }
    public List<MenuPermission> MenuPermissions { get; set; }
}

控制器端代码:

private readonly UserManager<MyIdentityUser> _UserManager;
public AdminSideMenuViewComponent(IMenuService menuService, UserManager<MyIdentityUser> userManager)
{
  this._MenuService = menuService;
  this._UserManager = userManager;
}
public async Task<IViewComponentResult> InvokeAsync()
{
  var user = await _UserManager.GetUserAsync(HttpContext.User);
  var role = user?.MyIdentityRole; // is always null
  var roleId = user?.MyIdentityRoleId; // returns actual roleId as it should
}

一个小问题是,当我得到一个 RoleManager 的用户时,一切都正确填写,但是 MyIdentityUser 中的导航 属性 MyIdentityRole 始终是 NULL 尽管 MyIdentityRoleId 显示正确的角色 ID。 在数据库 [dbo].[AspNetUsers] 中有一个由 codefirst 迁移生成的外键 MyIdentityRoleId

我是不是做错了什么?

but navigation property MyIdentityRole in MyIdentityUser is always NULL though MyIdentityRoleId shows correct role Id.

试试这个:

var username = HttpContext.User.Identity.Name;
var user = await _userManager.Users.Include(u => u.MyIdentityRole)
                                   .Where(u => u.UserName == username).FirstOrDefaultAsync();
var roles = user?.MyIdentityRole; 
var roleId = user?.MyIdentityRoleId;

结果: 另一个简单的方法:

var role = User.FindAll(c => string.Equals(c.Type, ClaimTypes.Role)).First().Value;