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 类,它包含自己的 DbSets,它还将创建一个模式来存储有关它管理的实体的所有信息。
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 文件所在的位置。
![命令提示符](https://www.w3ccoo.com/asp.net_core/images/command_prompt.jpg)
我们还可以通过键入 dnx ef 来获取实体框架命令。
![Dnx Ef](https://www.w3ccoo.com/asp.net_core/images/dnx_ef.jpg)
我们的 project.json 文件有一个部分将此"ef"关键字映射到 EntityFramework.Commands。
"commands": { "web": "Microsoft.AspNet.Server.Kestrel", "ef": "EntityFramework.Commands" }
我们可以从这里添加迁移。 我们还需要为迁移提供一个名称。 让我们使用 v2 作为版本 2,然后按回车键。
![V2 版本](https://www.w3ccoo.com/asp.net_core/images/v2_for_version.jpg)
迁移完成后,您的迁移文件夹中将有一个 v2 文件。
![V2 文件](https://www.w3ccoo.com/asp.net_core/images/v2_file.jpg)
我们现在想通过运行"dnx ef database update"命令将该迁移应用到我们的数据库。
![数据库更新](https://www.w3ccoo.com/asp.net_core/images/database_update.jpg)
实体框架将看到需要应用的迁移,并将执行该迁移。
如果您进入 SQL Server 对象资源管理器,您将看到我们之前创建的 Employee 表。 您还将看到一些必须存储用户、声明、角色的附加表,以及一些将用户映射到特定角色的映射表。
![附加表](https://www.w3ccoo.com/asp.net_core/images/additional_tables.jpg)
所有这些表都与身份框架提供的实体相关。
让我们快速浏览一下用户表。
![用户表](https://www.w3ccoo.com/asp.net_core/images/users_table.jpg)
您现在可以看到 AspNetUsers 表中的列包括用于存储我们在继承自的身份用户上看到的所有属性的列,以及它的字段,如 UserName 和 PasswordHash。 因此,您一直在使用一些内置身份服务,因为它们还包含创建用户和验证用户密码的功能。