ASP.NET Core Identity 迁移

在本章中,我们将讨论 Identity 迁移。在 ASP.NET Core MVC 中,Identity 验证和标识功能在 Startup.cs 文件中配置。

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddControllersWithViews();
  4. services.AddDbContext<MyCoreWebDbContext>(options =>
  5. options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
  6. services.AddIdentity<User, IdentityRole>()
  7. .AddEntityFrameworkStores<MyCoreWebDbContext>();
  8. services.AddRazorPages();
  9. }

每当您对某个实体类进行更改或对 DBContext 派生类进行更改时,都可能需要创建一个新的迁移脚本来应用于数据库,并使架构与代码中的内容同步。

在我们的应用程序中就是这样,因为我们现在从 IdentityDbContext 类派生出 MyCoreWebDbContext 类,它包含自己的 DbSet,并且它还将创建一个模式来存储有关它管理的实体的所有信息。

  1. using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
  2. using Microsoft.EntityFrameworkCore;
  3. namespace MyCoreWeb.Models
  4. {
  5. public class MyCoreWebDbContext : IdentityDbContext<User>
  6. {
  7. public MyCoreWebDbContext(DbContextOptions<MyCoreWebDbContext> options) : base(options)
  8. {
  9. }
  10. public DbSet<Employee> Employees { get; set; }
  11. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  12. {
  13. optionsBuilder.UseSqlServer("Data Source=localhost;Initial Catalog=program;Persist Security Info=True;User ID=sa;Password=123456");
  14. }
  15. }
  16. }

右键点击项目,选择 "在终端中打开" 或 "Open In Terminal" 打开命令行工具,输入以下命令:

  1. dotnet ef migrations add ident --context MyCoreWebDbContext

Entity Framework 将找到需要应用的迁移,并将执行该迁移。

Migrations 文件夹中,可以查看生成的迁移文件 xxxxxx_iden.cs 的内容:

如果进入 SQL Server 对象资源管理器,您将看到前面创建的 Employee 表。您还将看到一些必须存储用户、声明、角色的附加表,以及一些将用户映射到特定角色的映射表。

所有这些表都与 Identity 框架提供的实体相关。

让我们快速查看一下用户表。

现在,您可以看到 AspNetUsers 表中的列包括存储我们从中继承的 Identity User 上看到的所有属性的列,以及 UserNamePasswordHash 等字段。因此,您一直在使用一些内置的 Identity 服务,因为它们还包含创建用户和验证用户密码的功能。