ASP.NET Core – 身份迁移

ASP.NET Core – 身份迁移


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

public void ConfigureServices(IServiceCollection services) { 
   services.AddMvc(); 
      services.AddEntityFramework() 
      .AddSqlServer() 
      .AddDbContext<FirstAppDemoDbContext>option.
      UseSqlServer(Configuration["database:connection"]));  
   
   services.AddIdentity<User, IdentityRole>() 
      .AddEntityFrameworkStores<FirstAppDemoDbContext>(); 
}

每当您对实体类之一进行更改或对 DBContext 派生类进行更改时,您很有可能必须创建一个新的迁移脚本以应用于数据库并使架构与代码中的内容同步.

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

using Microsoft.AspNet.Identity.EntityFramework; 
using Microsoft.Data.Entity;  

namespace FirstAppDemo.Models { 
   public class FirstAppDemoDbContext : IdentityDbContext<User> { 
      public DbSet<Employee> Employees { get; set; }  
      
      protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { 
         optionsBuilder.UseSqlServer("Data Source = (localdb)\\MSSQLLocalDB;
            Initial Catalog = FirstAppDemo;Integrated Security = True;
            Connect Timeout = 30;Encrypt = False;
            TrustServerCertificate = True;ApplicationIntent = ReadWrite;
            MultiSubnetFailover = False"); 
      }
   } 
} 

现在让我们打开命令提示符并确保我们位于项目的 project.json 文件所在的位置。

命令提示符

我们还可以通过键入dnx ef来获取实体框架命令

Dnx Ef

我们的 project.json 文件有一个部分将这个“ef”关键字与 EntityFramework.Commands 映射。

"commands": { 
   "web": "Microsoft.AspNet.Server.Kestrel", 
   "ef": "EntityFramework.Commands" 
} 

我们可以从这里添加迁移。我们还需要为迁移提供一个名称。让我们将 v2 用于版本 2,然后按 Enter。

V2 版本

迁移完成后,您的迁移文件夹中将有一个 v2 文件。

V2文件

我们现在想通过运行“dnx ef database update”命令将该迁移应用到我们的数据库中

数据库更新

实体框架将看到需要应用的迁移,并将执行该迁移。

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

附加表

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

让我们快速浏览一下users 表

用户表

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

觉得文章有用?

点个广告表达一下你的爱意吧 !😁