Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Net核心标识每个用户一个角色_C#_.net Core_Entity Framework Core_Asp.net Core Identity - Fatal编程技术网

C# Net核心标识每个用户一个角色

C# Net核心标识每个用户一个角色,c#,.net-core,entity-framework-core,asp.net-core-identity,C#,.net Core,Entity Framework Core,Asp.net Core Identity,每个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;

每个
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; }
}
公共类MyIdentityUser:IdentityUser
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串图像{get;set;}
公共字符串PersonalNumber{get;set;}
公共字符串地址{get;set;}
公共布尔被删除{get;set;}
公共字符串MyIdentityRoleId{get;set;}
公共MyIdentityRole MyIdentityRole{get;set;}
}
公共类MyIdentityRole:IdentityRole
{
公共列表MyIdentityUsers{get;set;}
公共列表菜单超任务{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
}
private readonly UserManager\u UserManager;
公共AdminSideMenuViewComponent(IMenuService MenuUserVice、UserManager UserManager)
{
这是.\u MenuService=MenuService;
这是.\u UserManager=UserManager;
}
公共异步任务InvokeAsync()
{
var user=await\u UserManager.GetUserAsync(HttpContext.user);
var role=user?.MyIdentityRole;//始终为空
var roleId=user?.MyIdentityRoleId;//返回实际的roleId
}
一个小问题是,当我让一个用户使用
rolemager
时,所有内容都正确填写了,但是
MyIdentityUser
中的导航属性
MyIdentityRole
始终为NULL,尽管
MyIdentityRoleId
显示了正确的角色Id。 在数据库
[dbo].[AspNetUsers]
中有一个由codefirst迁移生成的外键
MyIdentityRoleId

我做错什么了吗

但MyIdentityUser中的导航属性MyIdentityRole始终为NULL,尽管MyIdentityRoleId显示正确的角色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;

首先,为什么要使用这样的限制<代码>角色始终可用,并且已包含单个
角色
。其次,你发布的内容并没有显示你是如何定制身份的。实际上,使用同一类名两次可以从不同的基类继承。这不会编译请添加更多详细信息。这是如何实现的;RoleManager是否加载数据?您正在使用实体框架吗?如果“是”,我猜您的模型可能没有以加载引用的方式定义,或者自动加载被禁用,在这种情况下,您可能必须立即加载它。@PanagiotisKanavos复制错误。。。很抱歉我更正了它,并添加了一些代码。@vanit的实体框架核心和核心标识。我只想将角色和用户之间的默认多对多关系设置为用户的一对多关系。我希望每个用户有一个角色。@PanagiotisKanavos首先,性能可能会更高,其次,是否有一种方法可以自定义标识以每个用户使用一个角色?我只是问问