使用实体框架核心使用ASP.NET核心身份,我需要在应用中添加不同类型的用户:
假设我需要两种用户:"学生"one_answers"老师";他们两个也是应用程序器,因为必须对其进行身份验证才能访问应用程序。
我已经完成了这两个表:一张桌子:一张桌子,一个用于老师。这两个表都是与Applicationuser表一对一相关的。
我想知道这是正确的还是我做错了什么,,因为在使用迁移的数据库更新数据库时会引发错误" forefer"'frk_student_aspnetusers_id in'student''表中的表格可能会导致周期或多个级联路径。在删除无操作或更新操作上指定" "。而且,无论如何,如果它正确,最后我将拥有一个带有两个列的应用程序服务器类(一个用于StudentId,另一个用于教师ID),其中一个始终将是无效的,因为应用程序使用者可以是学生或老师,但不是两者。
这是我到目前为止的代码:
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; }
}
更新了:我已经将Cholestid和StudentId设置为无效,因此上面提到的错误已经消失了。
您不应为拥有的每个用户类型创建不同的表。您应该创建角色并将该角色分配给用户。例如,创建一个角色学生和一个角色老师,并将他们分配给您的需求。
所以我会说你所做的不是一个好设计。
当您需要为学生/老师节省其他值时,我会做与您的设计类似的事情。但是我不会将我的学生/老师的ID添加到我的Applicationuser课程中。我只需在我的学生/老师课上添加一个用户ID。因此,设计问题应该是您正在尝试将这些内容放入应用程序级别的类别。