Cic*_*iux 1 asp.net-identity asp.net-core-webapi asp.net-core-2.0
我开始开发具有.net core 2和Web服务的Web应用程序。
当用户在站点上注册时,他可以选择自己是公司还是简单用户,因此我将数据存储在特定表中,但登录数据存储在AspNetUsers中。
如何使用.net Core中的Identity处理它?
只需继承ApplicationUser
,即:
public class CompanyUser : ApplicationUser {}
public class SimpleUser : ApplicationUser {}
Run Code Online (Sandbox Code Playgroud)
默认情况下,EF将通过STI(单表继承)实现继承。本质上,的所有属性ApplicationUser
和所有派生都将进入的表ApplicationUser
(即AspNetUsers
)。Discriminator
将添加一列,其中将保存已保存的实际类的名称。然后,EF将在查询时使用此实例化正确的类型。这种方法的一个缺点是,派生类的属性必须是可为空的,因为并非每种使用类型都能够为其他用户类型的属性提供值。
如果愿意,可以按类型实现TPT或表。这将为您提供标准表,ApplicationUser
其中包含所有通用属性的列以及每个派生类型的表,其中仅包含在该派生类型上定义的属性,并包含返回到表的外键ApplicationUser
。使用这种方法,您可以在派生类上具有不可为空的属性,但是查询用户将需要连接。如果您想走这条路,则可以将Table
属性添加到派生类中,并使用其表具有的名称,也可以使用ToTable
fluent config方法OnModelCreating
执行此操作。
您需要牢记的一件事是,与用户一起使用的通用类(例如)UserManager<TUser>
需要针对您需要使用的每种类型进行实例化。例如,即使您这样做new CompanyUser()
,如果通过它的一个实例保存它UserManager<ApplicationUser>
,也会被上传并保存为的一个实例ApplicationUser
。要实际保存CompanyUser
实例,您需要使用的实例UserManager<CompanyUser>
。
归档时间: |
|
查看次数: |
1486 次 |
最近记录: |