在本章中,我们将讨论身份迁移.在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派生类进行更改时,你很可能会有创建一个新的迁移脚本以应用于数据库,并使模式与代码中的内容保持同步.
我们的应用程序就是这种情况,因为我们现在从我们的FirstAppDemoDbContext类派生IdentityDbContext类,它包含自己的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文件存在于我们的项目中.
我们也可以通过输入 dnx ef 来获取实体框架命令.
我们的project.json文件有一个部分,用于将这个"ef"关键字映射到EntityFramework.Commands.
"commands": { "web": "Microsoft.AspNet.Server.Kestrel", "ef": "EntityFramework.Commands" }
我们可以从这里添加迁移.我们还需要为迁移提供名称.让我们将v2用于版本2并按回车.
迁移完成后,迁移文件夹中将包含v2文件.
我们现在想通过运行"dnx ef database update"命令将该迁移应用到我们的数据库.
实体框架将看到有一个需要应用的迁移,它将会执行该迁移.
如果您进入SQL Server对象资源管理器,您将看到我们之前创建的Employee表.您还将看到一些必须存储用户,声明,角色以及将用户映射到特定角色的映射表的其他表.
所有这些表都与Identity框架提供的实体相关.
让我们快速查看用户表.
现在,您可以看到AspNetUsers表中的列包含用于存储我们在继承自的Identity User上看到的所有属性的列,以及UserName和PasswordHash等字段.因此,您一直在使用一些内置的身份服务,因为它们还包含创建用户和验证用户密码的功能.