在 ASP.NET Identity 中使用 AspNetUsers table 的自定义属性
Using custom properties for AspNetUsers table in ASP.NET Identity
我在 MVC
应用程序中使用 ASP.NET Identity 2.0
并且有一个名为 AspNetUsers 的默认 table 以便将用户数据与以下列:
AspNetUsers:
Id
Email
EmailConfirmed
PasswordHash
... etc
我知道我可以向此实体添加自定义属性,如 Name
、Surname
等 AspNetUsers
table。但是,我的项目中有两种类型的用户:Student
和 Professor
。因此我需要使用不同的属性,如下所示:
学生:
Id
Name
Surname
Email
StudentNumber
Department
教授:
Id
Name
Email
Surname
Profession
RoomNumber
此时我在组合这些实体时遇到了问题,我不知道如何组合它们。学生和教授存储在 AspNetUsers
table 中,我认为没有必要在不同的 table 上定义与 Email
相同的数据,最好只使用Student
和 Professor
table 中的不同属性如 StudentNumber
、RoomNumber
等。当用户登录系统时,我想使用 AspNetUsers
table 然后从 Student
或 Professor
table 获取当前用户的详细数据。对于这种情况有更好的方法吗?我认为 ASP.NET Identity
是常用的,很多人需要为不同类型的用户存储不同的细节属性。任何帮助,将不胜感激。
将通用属性移至 AspNetUsers
table,即您的姓名、电子邮件、姓氏。同样,登录详细信息功能对学生和教师都是相同的,这些 table 也是如此。对于特定于教师或教授的信息,那是 您需要特定 table 的地方。例如
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
}
这是另一种可能的解决方案,但它是否适合您的需要取决于您。您可以为您的模型 Table 每个层次结构 (TPH)。首先使您的用户 class 抽象并将所有通用属性放在那里:
public abstract class ApplicationUser : IdentityUser
{
//snip
//Common properties
public string Name { get; set; }
public string Surname { get; set; }
}
现在创建不同的用户类型 classes 并从基础 class:
继承
public class StudentUser : ApplicationUser
{
public string StudentNumber { get; set; }
}
public class ProfessorUser : ApplicationUser
{
public string Profession { get; set; }
}
我在 MVC
应用程序中使用 ASP.NET Identity 2.0
并且有一个名为 AspNetUsers 的默认 table 以便将用户数据与以下列:
AspNetUsers:
Id
Email
EmailConfirmed
PasswordHash
... etc
我知道我可以向此实体添加自定义属性,如 Name
、Surname
等 AspNetUsers
table。但是,我的项目中有两种类型的用户:Student
和 Professor
。因此我需要使用不同的属性,如下所示:
学生:
Id
Name
Surname
Email
StudentNumber
Department
教授:
Id
Name
Email
Surname
Profession
RoomNumber
此时我在组合这些实体时遇到了问题,我不知道如何组合它们。学生和教授存储在 AspNetUsers
table 中,我认为没有必要在不同的 table 上定义与 Email
相同的数据,最好只使用Student
和 Professor
table 中的不同属性如 StudentNumber
、RoomNumber
等。当用户登录系统时,我想使用 AspNetUsers
table 然后从 Student
或 Professor
table 获取当前用户的详细数据。对于这种情况有更好的方法吗?我认为 ASP.NET Identity
是常用的,很多人需要为不同类型的用户存储不同的细节属性。任何帮助,将不胜感激。
将通用属性移至 AspNetUsers
table,即您的姓名、电子邮件、姓氏。同样,登录详细信息功能对学生和教师都是相同的,这些 table 也是如此。对于特定于教师或教授的信息,那是 您需要特定 table 的地方。例如
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
}
这是另一种可能的解决方案,但它是否适合您的需要取决于您。您可以为您的模型 Table 每个层次结构 (TPH)。首先使您的用户 class 抽象并将所有通用属性放在那里:
public abstract class ApplicationUser : IdentityUser
{
//snip
//Common properties
public string Name { get; set; }
public string Surname { get; set; }
}
现在创建不同的用户类型 classes 并从基础 class:
继承public class StudentUser : ApplicationUser
{
public string StudentNumber { get; set; }
}
public class ProfessorUser : ApplicationUser
{
public string Profession { get; set; }
}