Я использую. NET Core 3.1, и я хочу запросить пользователей в моей базе данных.
Итак, я изменил свой класс ApplicationUser
следующим образом:
public class ApplicationUser : IdentityUser
{
public ICollection<IdentityUserRole<string>> UserRoles { get; set; }
}
И теперь я пытаюсь запросить пользователей.
var users = from u in DbContext.Users
select new UserViewModel
{
Email = u.Email,
EmailConfirmed = u.EmailConfirmed,
Phone = u.PhoneNumber,
Roles = u.UserRoles.Select(r => r.Role.Name) // Whoops! Won't work
};
Проблема в том, что UserRoles
имеет свойство RoleId
, но у них нет свойства Role
.
Итак, как мне получить имена этих ролей?
Обновление:
Основываясь на комментариях Джавада, я изменил свой код следующим образом:
public class ApplicationUser : IdentityUser
{
public ICollection<IdentityRole> Roles { get; set; }
}
И
Users = (from u in DbContext.Users
select new UserViewModel
{
Email = u.Email,
EmailConfirmed = u.EmailConfirmed,
Phone = u.PhoneNumber,
Roles = u.Roles.Select(r => r.Name)
})
.ToList();
Я думал, что не могу этого сделать, потому что это отношения «многие ко многим». Но на самом деле он компилируется. Однако, когда я запускаю его, я получаю сообщение об ошибке.
Недопустимое имя столбца ApplicationUserId.
Я не уверен, где указывается это имя столбца. Похоже, что это не имя столбца в базе данных.
Обновление 2:
Оказывается, указанная выше ошибка связана с ожиданием миграции базы данных. Однако я не хотел менять базу данных. Как я изначально подозревал, я не могу выполнить ApplicationUser.ICollection<IdentityRole>
, потому что есть промежуточная таблица.
Итак, я запустил его, но он не дал результатов (потому что нет внешних ключей от IdentityRole
до ApplicationUser
.
Итак, возникает вопрос: как я могу запрашивать пользователей вместе с их ролями?