使用mvc5身份自定义和集成自己的数据库

扎克尔字体

我正在开发一个需要身份验证和授权的 MVC 项目,该项目将使用 Identity 创建,而且我的项目数据库包括应该使用系统的主要实体,处理这种情况的最佳实践是什么。

  1. 我应该根据我的要求自定义身份 ApplicationUser 吗?
  2. 创建我自己的表(模型)并将它们与身份表集成,我不知道该怎么做。或任何其他解决方案。
克里斯普拉特

您当然应该自定义 Identity 实体,因为这就是创建 Identity 的全部原因:允许更大的可扩展性。要拥有不同类型的“用户”,您应该继承自ApplicationUser; 重要的是,不是IdentityUser直接来自这将确保核心身份关系(角色、声明、登录等)都与单个“用户”表相关联,然后您可以扩展该表或创建其他表来保存其他用户数据。

public class ApplicationUser : IdentityUser

public class Student : ApplicationUser

public class Instructor : ApplicationUser

默认情况下,这种继承将由TPH(Table Per Hierarchy)实现,也称为STI(单表继承)。这意味着来自所有派生类的所有属性都将由单个数据库表中的列表示。Discriminator还将添加列,其中包含已保存的实际类的名称,即“ApplicationUser”、“Student”或“Ins​​tructor”。当从您的查询构建对象图以实例化正确的“用户”类型时,EF 将使用此列。

这种方法有利有弊。由于所有内容都存在于单个表中,因此查询既简单又快捷。但是,这种方法要求每个派生类上的所有属性在数据库级别都可以为空显而易见的原因是因为如果Instructor有一个必需的列,您将无法 save Student,因为Student没有满足该要求的属性。您仍然可以使用视图模型在视图级别强制要求属性。但是,数据库中的实际列必须可以为空。

另一种方法是使用所谓的 TPT(每类型表)。在此继承策略中,将为ApplicationUser具有所有公共属性的基类 ( )创建一个表然后,将为每个谨慎的派生类创建一个表,其中仅包含该类上存在的属性。外键将添加到基类的表中,然后 EF 将使用该外键将该表中的公共数据连接到派生类表上的特定数据。这种方法允许您在数据库级别强制使用 NOT NULL,但它当然需要一个连接来引入所有数据,这会减慢您的查询速度。

要实现 TPT,您只需将[Table]注释添加到您的派生类:

[Table("Students")]
public class Student : ApplicationUser

[Table("Instructors")]
public class Instructor : ApplicationUser

最后要注意的一件事是您需要如何使用UserManager. 如果你AccountController搭建了你的,你会注意到它设置了一个UserManager控制器属性,然后用来创建用户、查找用户、更改密码等。这实际上是 的一个实例UserManager<ApplicationUser>,因为它是一个通用类型。如果您需要专门使用StudentInstructor,则需要分别实例化UserManager<Student>UserManager<Instructor>您不能使用 的实例,UserManager<ApplicationUser>因为它会将您的派生类型向上转换为ApplicationUser. 例如:

var student = new Student { ... };
await UserManager.CreateAsync(student);

实际上会导致ApplicationUser被保存到数据库中。学生特定的数据将被丢弃,Discriminator列的值为“ApplicationUser”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用MVC5和OWIN的自定义身份

来自分类Dev

使用MVC5和OWIN的自定义身份

来自分类Dev

首先使用数据库自定义身份表

来自分类Dev

MVC 5登录自定义数据库

来自分类Dev

Quickbooks PHP与自定义数据库架构的集成

来自分类Dev

ASP.NET MVC + API和WCF具有针对自定义数据库和活动目录的基于声明的授权和身份验证

来自分类Dev

如何使用MVC5自定义验证集合

来自分类Dev

使用WCF的MVC5和WebAPI自定义路由

来自分类Dev

在ASP.NET MVC5中使用自定义登录进行表单身份验证

来自分类Dev

在ASP.NET MVC5中使用自定义登录进行表单身份验证

来自分类Dev

使用MVC5中的现有用户数据库进行复杂身份验证

来自分类Dev

如何为新的Microsoft.Asp.NET身份(MVC5)设置自定义架构

来自分类Dev

在MVC / WAPI中将OAuth与自定义数据库架构一起使用

来自分类Dev

在MVC / WAPI中将OAuth与自定义数据库架构一起使用

来自分类Dev

如何使用自定义基本适配器和sqlite数据库刷新Listview?

来自分类Dev

在允许访问Internet之前,使用自定义数据库对WiFi客户端进行身份验证

来自分类Dev

Tigase 自定义数据库

来自分类Dev

ASP.NET MVC 5 自定义 RoleProvider 无法从数据库中检索用户名的角色

来自分类Dev

MVC5 EF6 CodeFirst使用两个数据库进行调试和发布

来自分类Dev

Mongo Atlas:自定义数据库的连接身份验证失败

来自分类Dev

PHP Symfony2自定义身份验证,无需数据库(SOAP)

来自分类Dev

Asp.Net身份-自定义数据库访问UserManager

来自分类Dev

MVC5中的自定义路由和名称空间

来自分类Dev

MVC5 ApplicationUser自定义属性

来自分类Dev

MVC5中的自定义验证错误消息

来自分类Dev

自定义JQuery捆绑包,MVC5

来自分类Dev

MVC5中的自定义路由

来自分类Dev

在laravel 5中使用自定义代码进行数据库备份,并从数据库中的每个表获取最多10行的数据

来自分类Dev

如何使用自己的数据库和身份验证创建新项目

Related 相关文章

  1. 1

    使用MVC5和OWIN的自定义身份

  2. 2

    使用MVC5和OWIN的自定义身份

  3. 3

    首先使用数据库自定义身份表

  4. 4

    MVC 5登录自定义数据库

  5. 5

    Quickbooks PHP与自定义数据库架构的集成

  6. 6

    ASP.NET MVC + API和WCF具有针对自定义数据库和活动目录的基于声明的授权和身份验证

  7. 7

    如何使用MVC5自定义验证集合

  8. 8

    使用WCF的MVC5和WebAPI自定义路由

  9. 9

    在ASP.NET MVC5中使用自定义登录进行表单身份验证

  10. 10

    在ASP.NET MVC5中使用自定义登录进行表单身份验证

  11. 11

    使用MVC5中的现有用户数据库进行复杂身份验证

  12. 12

    如何为新的Microsoft.Asp.NET身份(MVC5)设置自定义架构

  13. 13

    在MVC / WAPI中将OAuth与自定义数据库架构一起使用

  14. 14

    在MVC / WAPI中将OAuth与自定义数据库架构一起使用

  15. 15

    如何使用自定义基本适配器和sqlite数据库刷新Listview?

  16. 16

    在允许访问Internet之前,使用自定义数据库对WiFi客户端进行身份验证

  17. 17

    Tigase 自定义数据库

  18. 18

    ASP.NET MVC 5 自定义 RoleProvider 无法从数据库中检索用户名的角色

  19. 19

    MVC5 EF6 CodeFirst使用两个数据库进行调试和发布

  20. 20

    Mongo Atlas:自定义数据库的连接身份验证失败

  21. 21

    PHP Symfony2自定义身份验证,无需数据库(SOAP)

  22. 22

    Asp.Net身份-自定义数据库访问UserManager

  23. 23

    MVC5中的自定义路由和名称空间

  24. 24

    MVC5 ApplicationUser自定义属性

  25. 25

    MVC5中的自定义验证错误消息

  26. 26

    自定义JQuery捆绑包,MVC5

  27. 27

    MVC5中的自定义路由

  28. 28

    在laravel 5中使用自定义代码进行数据库备份,并从数据库中的每个表获取最多10行的数据

  29. 29

    如何使用自己的数据库和身份验证创建新项目

热门标签

归档