Моя настройка
В настоящее время у меня есть две модели, которые наследуются от ApplicationUser
, который наследует IdentityUser
. Пользовательские классы:
public abstract class ApplicationUser : IdentityUser
{
[PersonalData]
public string FirstName { get; set; }
[PersonalData]
public string LastName { get; set; }
[NotMapped]
public string FullName => $"{FirstName} {LastName}";
}
public class StudentUser : ApplicationUser
{
[PersonalData]
[Required]
public string StudentNumber { get; set; }
// A user belongs to one group
public Group Group { get; set; }
}
public class EmployeeUser : ApplicationUser { }
ApplicationUser
содержит общие свойства, такие как имя и фамилия. И StudentUser
и EmployeeUser
имеют свои собственные свойства и отношения. Эта структура следует наследованию таблицы на иерархию (TPH).
В идеале я хочу следовать наследованию таблиц по типу (TPT), потому что структура SQL лучше. ASP.NET Core изначально поддерживает только TPH, поэтому я использую подход TPT.
Эта проблема
Я добавил службу идентификации в Startup.cs
:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
Когда я вызываю UserManager<StudentUser>
или UserManager<EmployeeUser>
, я получаю следующую ошибку:
Служба для типа "Microsoft.AspNetCore.Identity.UserManager'1 [ClassroomMonitor.Models.StudentUser]" не зарегистрирована.
Мой вопрос
К сожалению, я не могу найти много об этой ошибке в сочетании с этой реализацией.
Возможно ли (даже) заставить это работать таким образом?
Любая помощь или мысли приветствуются.
Обновление 1
StudentUser
добавление StudentUser
или EmployeeUser
в качестве сервисов с определенной областью не работает (упоминается в качестве первого ответа).
services.AddScoped<UserManager<ApplicationUser>, UserManager<ApplicationUser>>();
// or..
services.AddScoped<UserManager<ApplicationUser>>();
Это приводит к следующей ошибке:
InvalidOperationException: невозможно разрешить службу для типа 'Microsoft.AspNetCore.Identity.IUserStore1 [ClassroomMonitor.Models.StudentUser]'
Обновление 2
Вот Гист, чтобы дать вам лучшее представление о структуре проекта: