Извлечь данные пользовательского профиля из списка IdentityUser с помощью linq - PullRequest
0 голосов
/ 23 октября 2019

ASP.Net Core 3 MVC веб-приложение с Identity

Мой контекст БД

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
    : base(options)
    {}
etc...

Таким образом, пользователи из IdentityUserContext являются общедоступным виртуальным DbSet и создаются как

DbSet Пользователи

Однако я определил ApplicationUser : IdentityUser для определения данных своего профиля.

public class ApplicationUser : IdentityUser
{
    [Display(Name = "Is Manager")]
    public bool IsSupervisor { get; set; }
    etc....

Итак, я настроил службы в файле startup.cs как:

services.AddDefaultIdentity (options => options.SignIn.RequireConfirmedAccount = true)

Я настроил свой UserManager как

private readonly UserManager _userManager

Но когда я пытаюсь использовать LINQ для доступа и фильтрацииПользовательские записи, основанные на информации моего пользовательского профиля (в записи «Деталь» вызова контроллера), мне говорят, что эти пользовательские атрибуты недоступны:

        var managers = new List<SelectListItem>();
        managers.AddRange(_context.Users.Where(x => x.IsSupervisor == true).Select(manager => new SelectListItem
        {
            Text = manager.DisplayName,
            Value = manager.Id.ToString()
        }).ToList());

        ViewBag.ManagersList = managers;

/ Users / robert /Проекты / mvc / Vacate / Controllers / EmployeesController.cs (59,59): Ошибка CS1061: «IdentityUser» не содержит определения для «IsSupervisor», и ни один из доступных методов расширения «IsSupervisor», принимающий первый аргумент типа «IdentityUser», не можетбыть найденным (вы не используете директиву using или ссылку на сборку?) (CS1061) (Vacate)

Таким образом, без использования отдельной таблицы для хранения информации профиляИон, есть ли способ использовать LINQ против пользователей, имеющих доступ к вашим пользовательским профилям? Что-то вроде «приведения» «Пользователи» - это правильный тип ApplicationUser в вызове LINQ? Или я что-то упустил при настройке класса ApplicationUser для использования в Identity?

1 Ответ

0 голосов
/ 24 октября 2019

Вы должны сделать по умолчанию ApplicationDbContext использовать новый ApplicationUser:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}

Обновите вашу базу данных: Add-migration, Update-Database.

...