使用 ApplicationDbContext 的身份脚手架

2023-12-22

ASP.NET Core 2.x 现在将身份页面和逻辑隐藏在库内。为了延长IdentityUser具有新属性的实体并添加 UI 和逻辑来处理这些新属性,我们现在可以运行“身份脚手架”(在 MyProject -> 添加 -> 新脚手架项下)。很遗憾,充其量是不完整的,而且在很多情况下,完全是错误的。

我正在努力弄清楚如何与脚手架和生成的代码进行斗争,以实现我认为是一个非常标准的用例:

  1. 我从一个新的 ASP.NET Core MVC 应用程序开始
  2. 我想延长IdentityUser和我自己的财产。由于这涉及创建一个继承类,因此我希望该新类的名称为ApplicationUser.
  3. 我想搭建我需要摆弄的身份页面(登录、注册、管理等)
  4. 我想使用现有的ApplicationDbContext

我的问题是,阅读文档并使用身份脚手架,我不知道如何让脚手架让我扩展IdentityUser and继续使用现有的ApplicationDbContext.


凝视之后并使用脚手架和生成的代码,我想我已经弄清楚了大部分内容。

  1. 从新的 ASP.NET Core Web 应用程序开始,使用“个人用户帐户”身份验证。显然,无论您是从“Web 应用程序”(即 Razor Pages)还是“Web 应用程序(模型-视图-控制器)”(即 MVC)开始并不重要。最后,身份页面将是 Razor 页面,但它们在 MVC 应用程序中运行得很好。
  2. 构建解决方案。我不确定这是否有必要,但这并没有什么坏处......
  3. 在你走得更远之前,确保您喜欢您的数据库连接字符串(在 appsettings.json 中)。在包管理器控制台中,输入命令更新数据库。这显然会更新 ApplicationDbContextModelSnapshot.cs 文件以包含从项目模板获得的初始迁移。如果您跳过此步骤,那么当您添加第一个迁移时,它将包括 00000000000000_CreateIdentitySchema.cs 中已有的所有迁移步骤。此外,这一步显然是必要的,以便脚手架工能够识别现有的ApplicationDbContext.
  4. 右键单击该项目并选择添加 -> 新脚手架项目;选择Identity物品种类
  5. 指定现有的 _Layout.cshtml 并选择要搭建的页面
  6. 在数据上下文类旁边,单击下拉箭头并选择现有的ApplicationDbContext
  7. 单击“添加”按钮以执行脚手架。

此时,您的项目已连接到现有的ApplicationDbContext and IdentityUser类。现在,您可以扩展IdentityUser并连接身份页面以使用新的扩展实体:

添加新的ApplicationUser继承自的类IdentityUser:

public class ApplicationUser : IdentityUser
{
    public string Nickname { get; set; }
}

添加新的ApplicationUser实体到ApplicationDbContext class:

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    public DbSet<ApplicationUser> AppUsers { get; set; }
}

替换所有实例<IdentityUser> with <ApplicationUser>。这意味着您将更改startup.cs来调用services.AddDefaultIdentity<ApplicationUser>(),并且您将替换所有引用SigninManager and UserManager指定新的<ApplicationUser>键入参数。

哇...现在,您可以进入 Register.cshtml.cs 之类的内容并创建(或获取)一个新的ApplicationUser而不是一个IdentityUser,所有的管道都将连接到ApplicationUser。例如,Register.cshtml.cs 中的代码可能如下所示:

var user = new ApplicationUser {
    UserName = Input.Email,
    Email = Input.Email,
    Nickname = Input.Nickname // New property
};
var result = await _userManager.CreateAsync(user, Input.Password);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ApplicationDbContext 的身份脚手架 的相关文章

随机推荐

  • Microsoft.AspNetCore.OData 8:按照惯例找不到控制器

    如中所述docs https github com OData AspNetCoreOData blob master docs routing overview md Microsoft AspNetCore OData 8 使用约定将控
  • MongoDB 正则表达式搜索:有关用户输入的安全性

    如果我能保证输入 value在下面的示例中 是字符串 即攻击者无法使用 PHP 魔法数组注入 以下代码足以防止注入吗 regex str replace value if substr value 0 1 regex regex if su
  • 如何将sqlite数据转换为xml文件以及将xml文件转换为sql数据?

    我正在开发一个应用程序 我想用 sqlite 数据创建一个 XML 文件 并将另一个 XML 数据放入 sqlite 字段中 所以请告诉我该怎么做 希望您使用 Core Data 与数据库进行交互 如果您这样做了 只需循环您的实体并使用 N
  • 具有渐变和平铺图像的 Android 背景

    对于线性布局 我希望在背景中具有渐变和平铺 重复 图像 我已经将形状 xml 设置为背景
  • Bash 终端不允许输入

    我尝试在 Windows 10 机器上使用 VS Code 中的集成终端和 bash 终端 自三月份以来我一直在使用相同的设置 但现在突然不允许我在终端中输入任何内容 当我启动 VS Code 时 终端会打开 但屏幕一直向下滚动 如果向上滚
  • LINQ-NHibernate - 为复杂对象仅选择几个字段(包括集合)

    我在我的一个项目 和 ASP NET MVC 应用程序 中使用 Fluent NHibernate 并使用 LINQ 来查询数据 使用 LINQ to NHibernate 库 更改物体名称是为了保护无辜者 假设我在数据库 MySQL 中有
  • 如何在JAVA中使用apache poi删除Excel中的警告?

    我在用apache poi api在我的 java 应用程序中生成 Excel 工作表 Excel 中设置的数据以字符串类型动态获取 对于第 1 列 值是字母数字 当我生成 Excel 时 它会给我绿色指示并带有警告 数字存储为文本 or
  • 对称 Lerp 和编译器优化

    我有一个功能 float lerp float alpha float x0 float x1 return 1 0f alpha x0 alpha x1 对于那些还没有看过的人来说 这比x0 x1 x0 alpha因为后者并不能保证ler
  • SonarQube 5.6 恢复质量配置文件

    我正在尝试使用curl 通过 Web API 恢复全新安装的 SonarQube v 5 6 4 的质量配置文件 在 c temp 中 我有一个从运行 Sonar 导出的 Sonar way 配置文件 我已将其重命名为 test xml 在
  • 使用 php usort 进行第二次排序

    所以我有相当大的数据数组 需要按两个标准对它们进行排序 有变数 data important and data basic 它们是简单的数字 我使用 uasort 进行排序 data首先按重要 然后按基本 So Important Basi
  • 如何在powershell中分析(计时)

    我的 powershell 脚本运行缓慢 有什么方法可以分析 powershell 脚本吗 在此处发布您的脚本确实有助于给出准确的答案 您可以使用 Measure Command 查看脚本中每个语句所花费的时间 但是 您必须将每个语句包装在
  • 基于在线 Apache Web 日志分析器,仅提交原始日志文件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个来自 Apache 的原始 access log 文件 是否有任何基于网络的版本工具 我可以在其
  • XSLT:如何生成每行 3 个单元格的 HTML 表格

    我按照以下说明生成了一个每行 2 个单元格的 HTML 表格这篇文章来自 StackOverflow https stackoverflow com questions 5387134 xslt and tables setting num
  • 如何使用 F# 语法将 Type 作为属性参数传递?

    FsCheck 允许自定义Arbitrary在其 NUnit 集成中
  • Ruby 中的自然语言处理 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想做一些句子分析 主要针对 Twitter 应用程序 并推断一些一般特征 Ruby 中有针对此类事情
  • 如何在 Perl 中使用 fork() ?

    我的数组中有数百个文件名 我想为数组中的每 4 个文件创建一个子进程 并让该子进程对这 4 个文件中的每一个文件执行一些操作 因此 对于 100 个文件 我将创建 25 个进程 我在理解存在分叉时处理行的顺序时遇到一些困难 我本以为我可以做
  • Audiomanager 和 MediaPlayer 之间的区别

    谁能解释一下有什么区别AudioManager and MediaPlayer在安卓中 如果我是对的 那么AudioManager只能播放音频 而MediaPlayer可以播放音频和视频 但我相信这其中一定还有更多的内容 Thanks Au
  • 如何在 Python 中进行 Obj-C 类别?

    Obj C 我已经很长时间没有使用它了 有一个叫做类别 http macdevelopertips com objective c objective c categories html来延长课程 用新方法声明一个类别并将其编译到您的程序中
  • 如何在 Objective c 中获取当前月份的日期?

    我正在开发一个使用日期 月份 年份的应用程序 我想要当前月份的日期 因为当前月份可以有 28 29 30 31 天 我试图获取当年的月份 但我不知道上面的代码 这是我的代码 NSDateFormatter dateFormatter NSD
  • 使用 ApplicationDbContext 的身份脚手架

    ASP NET Core 2 x 现在将身份页面和逻辑隐藏在库内 为了延长IdentityUser具有新属性的实体并添加 UI 和逻辑来处理这些新属性 我们现在可以运行 身份脚手架 在 MyProject gt 添加 gt 新脚手架项下 很