ASP.NET Razor 页面标识

ASP.NET Razor Pages Identity

我几乎是 ASP.NET 的新手,对此我有疑问。

我创建了一个项目 - 使用 Razor Pages 的 Web 应用程序,我进行了依赖注入并进行了一些迁移。我有一些 classes,比如 Student、Teacher 和 Admin。我正在使用身份和代码优先。

我的问题是: 我有很多用户,但对于我的数据库,所有这些用户只有一个 table。我给他们一些角色,在一个 table 我有 UserId 和 RoleId,这意味着他们有联系。

用户table:

CREATE TABLE [dbo].[AspNetUsers] (
[Id]                            NVARCHAR (450)     NOT NULL,
[UserName]                      NVARCHAR (256)     NULL,
[NormalizedUserName]            NVARCHAR (256)     NULL,
[Email]                         NVARCHAR (256)     NULL,
[NormalizedEmail]               NVARCHAR (256)     NULL,
[EmailConfirmed]                BIT                NOT NULL,
[PasswordHash]                  NVARCHAR (MAX)     NOT NULL,
[SecurityStamp]                 NVARCHAR (MAX)     NULL,
[ConcurrencyStamp]              NVARCHAR (MAX)     NULL,
[PhoneNumber]                   NVARCHAR (MAX)     NULL,
[PhoneNumberConfirmed]          BIT                NOT NULL,
[TwoFactorEnabled]              BIT                NOT NULL,
[LockoutEnd]                    DATETIMEOFFSET (7) NULL,
[LockoutEnabled]                BIT                NOT NULL,
[AccessFailedCount]             INT                NOT NULL,
[AreaCodeAndTown]               NVARCHAR (100)     NULL,
[Discriminator]                 NVARCHAR (MAX)     DEFAULT (N'') NOT NULL,
[Name]                          NVARCHAR (50)      NULL,
[RoadNameAndNumber]             NVARCHAR (100)     NULL,
[StudentUser_Name]              NVARCHAR (50)      NULL,
[TeacherUser_AreaCodeAndTown]   NVARCHAR (100)     NULL,
[TeacherUser_Name]              NVARCHAR (50)      NULL,
[TeacherUser_RoadNameAndNumber] NVARCHAR (100)     NULL,
CONSTRAINT [PK_AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC)

);

学生class:

public class StudentUser : IdentityUser
{
    [Required]
    [MaxLength(50)]
    public string Name { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [NotMapped] //ignore
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Compare(nameof(Password))]
    [NotMapped] //ignore
    public string ConfirmPassword { get; set; }

    public virtual ICollection<Course> Courses { get; set; }
} 

老师class:

public class TeacherUser : IdentityUser
{
    [Required]
    [MaxLength(50)]
    public string Name { get; set; }
    
    [MaxLength(100)]
    public string RoadNameAndNumber { get; set; }
    
    [MaxLength(100)]
    public string AreaCodeAndTown { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [NotMapped] //ignore
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Compare(nameof(Password))]
    [NotMapped] //ignore
    public string ConfirmPassword { get; set; }
}

ApplicationDbContext:

public class ApplicationDbContext : IdentityDbContext
{

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

    public DbSet<AdminUser> AdminUsers { get; set; }
    public DbSet<StudentUser> StudentUsers { get; set; }
    public DbSet<TeacherUser> TeacherUsers { get; set; }
    public DbSet<Course> Courses { get; set; }
    public DbSet<Test> Tests { get; set; }
}

问题: 我如何才能从这个 table“用户”中得到确切的教师或学生?我在 google 中进行了搜索,但几乎所有关于 MVC 的信息,而不是关于 Razor Pages 的信息。

提前致谢!

我发现了我的错误。

我必须更改鉴别器,因为只有 IdentityUser,但我尝试调用 StudentUser 或 TeacherUser。

现在一切都很完美。我希望这些信息可以帮助别人。