У меня есть шаблон проекта по умолчанию веб-сайта ASP.NET MVC 5, и я пытаюсь перечислить всех пользователей с именами ролей (не идентификаторами).
Запрос:
db.Users.Include(u => u.Roles).ToList()
Затем я хочу напечатать имена ролей с чем-то вроде:
@string.Join(", ", user.Roles.Select(r => r.RoleId))
Проблема в том, что я могу достичь только RoleId
, а не класса ролей, где хранятся Name
и другие свойства.
Я могу запустить другой выбор, чтобы получить все роли, а затем использовать его в качестве поиска. Или просто написать соединение в запросе? Я не уверен, потому что у меня нет доступа к таблице с IdentityUserRole
сущностями, которые связывают пользователей и роли вместе.
Корень проблемы, по-видимому, является тем, что представляет собой набор ролей IdentityUserRole
(не Role
), который содержит только RoleId
и UserId
.
public class IdentityUserRole<TKey> {
public virtual TKey RoleId { get; set; }
public virtual TKey UserId { get; set; }
}
Я думал, что если кто-то хочет выполнить отношения N-to-N в EF, они должны поместить непосредственно коллекцию Roles
, а затем переопределить OnModelCreating
и указать отношения. Этот подход, похоже, затрудняет просмотр объектов друг от друга.
Почему они решили включить IdentityUserRole
в качестве дополнительной сущности? Уметь добавлять дополнительные данные в отношения? За счет того, что вы не можете перемещаться от пользователей к ролям?