У меня есть шаблон проекта по умолчанию веб-сайта 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 в качестве дополнительной сущности? Уметь добавлять дополнительные данные в отношения? За счет того, что вы не можете перемещаться от пользователей к ролям?

