Identity表的键映射在IdentityDbContext类的OnModelCreating()方法中 。因此,要解决这个错误,需要做的是,调用基类OnModelCreating()使用该方法的基础关键字,代码如下 。
public class AppDbContext:IdentityDbContext{public AppDbContext(DbContextOptions<AppDbContext> options):base(options){}public DbSet<Student> Students{get;set;}protected override void OnModelCreating(ModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);modelBuilder.Seed();}}执行Update-Database命令以应用迁移记录并创建所需的身份表,如图21.1所示 。

文章插图
图21.1
21.2 使用ASP.NET Core Identity注册新用户现在已经创建好了表的信息,接下来我们增加一个注册功能,让用户能够注册到系统中 。
新用户注册视图应如图21.2所示 。为了能够注册为新用户,需要邮箱地址和密码两个字段 。

文章插图
图21.2
21.2.1 RegisterViewModel视图模型我们将使用RegisterViewModel类作为Register视图的模型,它负责将视图中的信息传递给控制器 。为了验证信息是否正确,我们使用了几个ASP.NET Core验证属性 。在之前的章节中详细说明过这些属性和模型验证 。
using System.ComponentModel.DataAnnotations;namespace MockSchoolManagement.ViewModels{public class RegisterViewModel{[Required][EmailAddress][Display(Name = "邮箱地址")]public string Email{get;set;}[Required][DataType(DataType.Password)][Display(Name = "密码")]public string Password{get;set;}[DataType(DataType.Password)][Display(Name = "确认密码")][Compare("Password",ErrorMessage = "密码与确认密码不一致,请重新输入.")]public string ConfirmPassword{get;set;}}}在这里我们添加了DataType特性,它的主要作用是指定比数据库内部类型更具体的数据类型 。DataType枚举提供了多种数据类型,比如日期、时间、电话号码、货币和邮箱地址等 。但是请注意,DataType特性不提供任何验证,它主要服务于我们的视图文件,比如,DataType.EmailAddress可以在视图中创建mailto:链接,DataType.Date则会在支持html5的浏览器中提供日期选择器 。21.2.2 账户控制器账户控制器(AccountController)是指所有与账户相关的CRUD(增加、读取、更新和删除)操作都将在此控制器中 。目前我们只有Register()操作方法,可以通过向/account/register发出GET请求来实现此操作方法 。
using Microsoft.AspNetCore.Mvc;namespace MockSchoolManagement.Controllers{public class AccountController:Controller{[HttpGet]public IActionResult Register(){return View();}}}21.2.3 注册视图中的代码将此视图放在Views/Account文件夹中,此视图的模型是我们在前面创建的Register ViewModel 。@model RegisterViewModel@{ViewBag.Title = "用户注册";}<h1>用户注册</h1><div class="row"><div class="col-md-12"><form method="post"><div asp-validation-summary="All" class="text-danger"> </div><div class="form-group"><label asp-for="Email"> </label><input asp-for="Email" class="form-control" /><span asp-validation-for="Email" class="text-danger"> </span></div><div class="form-group"><label asp-for="Password"> </label><input asp-for="Password" class="form-control" /><span asp-validation-for="Password" class="text-danger"> </span></div><div class="form-group"><label asp-for="ConfirmPassword"> </label><input asp-for="ConfirmPassword" class="form-control" /><span asp-validation-for="ConfirmPassword" class="text-danger"> </span></div><button type="submit" class="btn btn-primary">注册</button></form></div></div>21.2.4 添加注册按钮在布局视图中添加注册按钮,我们需要在_Layout.cshtml文件中找到ID为collapsibleNavbar的导航菜单栏,在下方添加注册按钮,导航到对应的视图,代码如下 。<div id="collapsibleNavbar" class="collapse navbar-collapse"><ul class="navbar-nav"><li class="nav-item"><a class="nav-link" asp-controller="home" asp-action="Index">学生列表</a></li><li class="nav-item"><a class="nav-link" asp-controller="home" asp-action="Create">添加学生</a></li></ul><ul class="navbar-nav ml-auto"><li class="nav-item"><a class="nav-link" asp-controller="account" asp-action="register"> 注册 </a></li></ul></div>
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 孕吐吃啥可以缓解 怀孕吐吃什么可以缓解
- 亚马逊|NBA中从未缺席过季后赛的球员,个个都是传奇,你都知道么
- 英雄传说零之轨迹图文攻略
- 马的鞭很长吗? 马鞭有60cm那么长
- 漫谈Mysql之主从复制
- 正月初一吃饺子这一习俗从哪个朝代开始?
- Win10 Terminal + WSL 2 安装配置指南
- 从Linux源码看Socket的listen及连接队列
- SQL 中为什么经常要加NOLOCK?
- 大学|国内3所“神秘”的大学,入学要签保密协议,毕业后就从事铁饭碗
