首页 文章

使用ASP.NET Core 1.1 Identity和Entity Framework Core的不同用户类型

提问于
浏览
2

使用ASP.NET Core Identity和Entity framework Core我需要在我的应用中添加不同类型的用户:

假设我需要两种类型的用户:“学生”和“老师”;它们都是ApplicationUsers,因为它们必须经过身份验证才能访问应用程序 .

我已经完成了创建两个表:一个用于学生,一个用于教师 . 两个表都与ApplicationUser表一一对应 .

我做错了,因为在使用迁移更新数据库时会抛出错误“学生”表中的“FOREIGN KEY'FK_Student_AspNetUsers_Id'可能导致循环或多个级联路径 . 指定ON DELETE NO ACTION或UPDATE NO ACTION” . 并且,在任何情况下,如果它正确,最后我有一个ApplicationUser类有两列(一个用于StudentId,另一个用于TeacherId),其中一个将始终为null,因为ApplicationUser可以是Student或老师,但不是两个 .

到目前为止,这是我的代码:

public class ApplicationUser : IdentityUser<int>
{
    public string Name { get; set; }

    [ForeignKey("Teacher")]
    public int? TeacherId { get; set; }
    public virtual Teacher Teacher { get; set; }
    [ForeignKey("Student")]
    public int? StudentId { get; set; }
    public virtual Student Student { get; set; }
}

public class Student
{
    [Key, ForeignKey("User")]
    public int Id { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }
    public string MotherMaidenName { get; set; }
    public DateTime BirthDate { get; set; }
    public DateTime EnrollmentDate { get; set; }

    public virtual ApplicationUser User { get; set; }
}

public class Teacher
{
    [Key,ForeignKey("User")]
    public int Id { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }
    public string MotherMaidenNAme { get; set; }

    public virtual ApplicationUser User { get; set; }
}

UPDATED :我已将TeacherId和StudentId设置为可为空,因此上述错误消失了 .

1 回答

  • 0

    您不应为您拥有的每种用户类型创建不同的表 . 您应该创建角色并将该角色分配给用户 . 例如,创建角色学生和角色教师,并根据您的需要进行分配 .

    所以我会说你所做的并不是一个好的设计 .

    当您需要为学生/教师保存额外的值时,我会为您的设计做类似的事情 . 但我不会将我的学生/老师的ID添加到我的ApplicationUser课程中 . 我只想在我的学生/老师班上添加一个UserId . 因此,设计问题应该是您尝试将这些内容放入ApplicationUser类中 .

相关问题