【发布时间】:2015-02-05 12:09:58
【问题描述】:
我有 ASP.NET MVC 5 网站的默认项目模板,我正在尝试列出所有具有角色名称(而不是 ID)的用户。
查询是:
db.Users.Include(u => u.Roles).ToList()
然后我想用类似这样的方式打印角色名称:
@string.Join(", ", user.Roles.Select(r => r.RoleId))
问题是我只能访问RoleId,而不是存储Name 和其他属性的角色类。
我可以运行另一个选择来获取所有角色,然后将其用作查找。还是直接在查询中写一个join?我不知道怎么做,因为我无法访问带有将用户和角色绑定在一起的 IdentityUserRole 实体的表。
问题的根源似乎是IdentityUserRole(不是Role)的角色集合,其中仅包含RoleId 和UserId。
public class IdentityUserRole<TKey> {
public virtual TKey RoleId { get; set; }
public virtual TKey UserId { get; set; }
}
我认为如果想在 EF 中建立 N 对 N 关系,他们应该直接收集 Roles,然后覆盖 OnModelCreating 并指定关系。这种方法似乎使从一个对象浏览到另一个对象变得复杂。
为什么他们决定将IdentityUserRole 作为额外实体包含在内?为了能够向关系添加额外的数据?以无法从用户导航到角色为代价?
【问题讨论】:
-
您可以轻松地从用户导航到角色,连接表就在那里,因为存在多对多关系。我不认为身份团队只是为了好玩而制作垃圾系统....
-
@No1_Melman 您能否提供一个查询示例(也许作为答案)?谢谢。
-
给我一分钟
标签: c# asp.net-mvc-5 entity-framework-6 asp.net-identity-2