Lio*_*ion 5 asp.net-identity asp.net-core-mvc asp.net-core asp.net-core-1.0
使用ASP.NET Core身份,我创建了一个新用户UserManager.CreateAsync()并将其分配给现有角色UserManager.AddToRoleAsync.这是有效的,因为用户和角色之间的实现存储在AspNetUserRoles数据库的表中.
但是当我使用UserManager(例如UserManager.FindByMail()方法)获取用户时,Role列表为空.我也尝试过IncludeEF 的功能:
var user = userManager.Users.Include(u => u.Roles).FirstOrDefault(u => u.Email == "test@test.de");
Run Code Online (Sandbox Code Playgroud)
这给了我n:m关联表的ID,因为我需要角色名称,所以它不是很有用.也不可能使用第二个查询加载它们,因为Roles身份用户的属性是只读的.我希望得到一个List<string>角色名称.找不到任何关于此的信息.
对我来说,唯一的解决方法似乎是向我的用户添加一个自定义属性,并用数据填充它们,我使用第二个查询获取数据.但那不是一个好的解决方案.不能相信ASP.NET Core Identity没有更好的方法来获取这些数据......
rud*_*ias 11
默认情况下,UserManager不会加载关系.
手动包含是一种很好的方法,但正如此处所述 - EntityFramework Core 尚不支持直接M:N关系.
所以我有两种看法:
(优先的)使用
userManager.GetRolesAsync(user);
Run Code Online (Sandbox Code Playgroud)
这将返回一个List<string>用户的角色名称.或者使用一些EF查询IdentityRole通过加入IdentityUserRole 获取对象.不幸的是,这需要接受事实,角色不会直接在用户实体中.
或者你可以实现自定义IdentityUserRole,创建一个关系IdentityRole,然后用`查询它
Include(user => user.Roles).ThenInclude(role => role.Role)
Run Code Online (Sandbox Code Playgroud)
如何在此描述如何实现自己的身份实体.但它是复杂的方法,Role对象将嵌套在绑定实体中.
但是,您可以在以下位置声明属性ApplicationUser:
[NotMapped]
public List<string> RoleNames {get; set;}
Run Code Online (Sandbox Code Playgroud)
并免费使用它...
| 归档时间: |
|
| 查看次数: |
7596 次 |
| 最近记录: |