我在ASP.NET Identity 2.0
应用程序中使用MVC
,并且有一个名为 AspNetUsers 的默认表,以便将用户数据保存在以下列中:
AspNetUsers:
Id
Email
EmailConfirmed
PasswordHash
... etc
我知道我可以将此自定义属性作为Name
,Surname
等添加到此实体,此AspNetUsers
表格。但是,我的项目中有两种类型的用户:Student
和Professor
。因此,我需要使用不同的属性,如下所示:
学生:
Id
Name
Surname
Email
StudentNumber
Department
教授:
Id
Name
Email
Surname
Profession
RoomNumber
此时我在组合这些实体时遇到问题,我不知道如何将它们组合起来。学生和教授存储在AspNetUsers
表中,我认为不需要在不同的表上定义与Email
相同的数据,最好只使用Student
中的不同属性和Professor
表格为StudentNumber
,RoomNumber
等。当用户登录系统时,我认为首先使用AspNetUsers
表,然后获取当前用户的详细数据来自Student
或Professor
表。这种情况有更好的方法吗?我认为ASP.NET Identity
是常用的,许多人需要为不同类型的用户存储不同的详细信息属性。任何帮助,将不胜感激。
答案 0 :(得分:3)
这是另一种可能的解决方案,但您需要确定它是否适合您的需求。您可以为模型指定每个层次结构(TPH)。首先让你的用户类抽象并将所有常见属性放在那里:
public abstract class ApplicationUser : IdentityUser
{
//snip
//Common properties
public string Name { get; set; }
public string Surname { get; set; }
}
现在创建不同的用户类型类并从基类继承:
public class StudentUser : ApplicationUser
{
public string StudentNumber { get; set; }
}
public class ProfessorUser : ApplicationUser
{
public string Profession { get; set; }
}
答案 1 :(得分:2)
将公共属性移动到AspNetUsers
表,即您的姓名,电子邮件,姓氏。同样,对于学生和教师来说,登录详细信息功能也是相同的,这些表也是如此。有关您需要特定表格的教师或教授 特定的信息。 E.g。
public class AspNetUser
{
// Normal properties
public virtual Professor Professor { get; set; }
public virtual Student Student { get; set; }
}
public class Professor
{
[Key]
public int Id { get; set; }
public virtual AspNetUser User { get; set; } // This is where you will be able to retrieve their name, email etc
public string Profession { get; set; }
// Any other properties specific to a Professor
}