我有ASP.NET MVC 5网站的默认项目模板,我试图列出具有角色名称(而不是ID)的所有用户.
查询是:
db.Users.Include(u => u.Roles).ToList()
Run Code Online (Sandbox Code Playgroud)
然后我想用以下内容打印角色名称:
@string.Join(", ", user.Roles.Select(r => r.RoleId))
Run Code Online (Sandbox Code Playgroud)
问题是我只能访问RoleId,而不是Name存储其他属性的Role类.
我可以运行另一个select来获取所有角色,然后将其用作查找.或者直接在查询中写一个连接?我不知道是怎么回事,因为我无法访问IdentityUserRole具有绑定用户和角色的实体的表.
问题的根源似乎是Roles集合IdentityUserRole(非Role)仅包含RoleId和UserId.
public class IdentityUserRole<TKey> {
public virtual TKey RoleId { get; set; }
public virtual TKey UserId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想如果想要在EF中做N对N关系,他们应该直接收集Roles然后覆盖OnModelCreating并指定关系.这种方法似乎使从一个对象浏览对象变得复杂.
为什么他们决定将其IdentityUserRole作为额外的实 能够在关系中添加额外数据吗?代价是无法从用户导航到角色?