不同的用户类型与ASP.NET 1.1的核心身份和Entity Framework核心
使用ASP.NET核心身份与实体框架的核心,我需要在我的应用程序添加不同类型的用户:不同的用户类型与ASP.NET 1.1的核心身份和Entity Framework核心
比方说,我需要两种类型的用户:“学生”和“老师”;他们都是ApplicationUsers,因为他们必须通过身份验证才能访问应用程序。
我完成了创建两个表格:一个是学生,一个是老师。这两个表与ApplicationUser表是一对一的关系。
我想知道这是否正确,或者我做错了什么,,因为当用迁移更新数据库时,它会在“学生”表中引发错误“FOREIGN KEY'FK_Student_AspNetUsers_Id'可能导致周期或多个级联路径,指定ON DELETE NO ACTION或UPDATE NO ACTION“。在任何情况下,如果它正确,最后我会有一个ApplicationUser类,它有两列(一个用于StudentId,另一个用于TeacherId),其中一个将始终为空,因为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; }
}
修订:我已经设置TeacherId和StudentId为空的,因此上面提到的错误消失。
您不应该为每个用户类型创建不同的表。 您应该创建角色并将该角色分配给用户。例如,创建一个角色的学生和角色老师,并根据您的需求分配他们。
所以我会说你所做的不是一个好的设计。
当您需要为学生/老师保存附加值时,我会做与您的设计类似的工作。 但我不会将我的学生/老师的ID添加到我的ApplicationUser类中。 我只是简单地将UserId添加到我的学生/教师课程中。 所以设计问题应该是你试图把这些东西放到ApplicationUser类中。
我同意你的看法,这不是一个好的设计。我已经为不同的用户提供了角色,但是我还需要为他们每个角色提供不同的属性,我认为使用ApplicationUser作为用户与商业数据库中的其余表相关联也是一个糟糕的设计。 – MorgoZ
例如,学生有出生日期和入学日期,而老师没有,老师可以有主题。他们有不同的属性,所以ApllicationUser不是设置所有用户的类型属性的地方。 – MorgoZ
我明白你在想什么。我编辑了我的答案。 – user743414