博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【ASP.NET Core快速入门】(十三)Individual authentication 模板、EF Core Migration
阅读量:5036 次
发布时间:2019-06-12

本文共 15513 字,大约阅读时间需要 51 分钟。

Individual authentication 模板

我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以用命令    dotnet new mvc --help    来查看一些参数:

由于我们创建mvc项目是默认不带Identity验证的,所以我们要加上下面的  -au|--auth  参数来使用Individual创建带Identity验证的网站

还有一个参数  -uld|--use-local-db   参数来使用本地数据库,在VSCode默认的是使用SqlLite,在VS2017中默认使用的是LocalDB。

接下来我们就可以使用以下命令创建包含Identity的mvc网站IdentitySample

dotnet new mvc -au Individual -uld --name IdentitySample

创建完成后我们打开创建的项目,然后查看appsettings.json,发现已经默认创建了数据库连接,我们可以将数据库修改成自己的数据库地址

同时我们可以打开Startup.cs可以查看数据库配置以及Identity验证已经帮我们添加好了

 

接下来我们初始化一下数据库,否则启动之后会报错,所以我们要使用EF Core的Migration命令来初始化数据库。

我们使用的第一个命令是  dotnet ef database update  他会根据当前migration文件夹下的文件来帮我们进行数据库的创建和更新。

我们可以在终端看到执行的sql语句

PS C:\Users\Administrator\Desktop\Demo2\IdentitySample> dotnet ef database updateinfo: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]      User profile is available. Using 'C:\Users\Administrator\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.info: Microsoft.EntityFrameworkCore.Infrastructure[100403]      Entity Framework Core 2.0.0-rtm-26452 initialized 'ApplicationDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: Noneinfo: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (714ms) [Parameters=[], CommandType='Text', CommandTimeout='60']      CREATE DATABASE [aspnet-IdentitySample-9A22BB3E-8D53-4F44-B533-2EF927C959DE];info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (192ms) [Parameters=[], CommandType='Text', CommandTimeout='60']      IF SERVERPROPERTY('EngineEdition') <> 5 EXEC(N'ALTER DATABASE [aspnet-IdentitySample-9A22BB3E-8D53-4F44-B533-2EF927C959DE] SET READ_COMMITTED_SNAPSHOT ON;');info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (7ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE TABLE [__EFMigrationsHistory] (          [MigrationId] nvarchar(150) NOT NULL,          [ProductVersion] nvarchar(32) NOT NULL,          CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])      );info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (33ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      SELECT OBJECT_ID(N'__EFMigrationsHistory');info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      SELECT [MigrationId], [ProductVersion]      FROM [__EFMigrationsHistory]      ORDER BY [MigrationId];info: Microsoft.EntityFrameworkCore.Migrations[200402]      Applying migration '00000000000000_CreateIdentitySchema'.Applying migration '00000000000000_CreateIdentitySchema'.info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE TABLE [AspNetRoles] (          [Id] nvarchar(450) NOT NULL,          [ConcurrencyStamp] nvarchar(max) NULL,          [Name] nvarchar(256) NULL,          [NormalizedName] nvarchar(256) NULL,          CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id])      );info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE TABLE [AspNetUserTokens] (          [UserId] nvarchar(450) NOT NULL,          [LoginProvider] nvarchar(450) NOT NULL,          [Name] nvarchar(450) NOT NULL,          [Value] nvarchar(max) NULL,          CONSTRAINT [PK_AspNetUserTokens] PRIMARY KEY ([UserId], [LoginProvider], [Name])      );info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (15ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE TABLE [AspNetUsers] (          [Id] nvarchar(450) NOT NULL,          [AccessFailedCount] int NOT NULL,          [ConcurrencyStamp] nvarchar(max) NULL,          [Email] nvarchar(256) NULL,          [EmailConfirmed] bit NOT NULL,          [LockoutEnabled] bit NOT NULL,          [LockoutEnd] datetimeoffset NULL,          [NormalizedEmail] nvarchar(256) NULL,          [NormalizedUserName] nvarchar(256) NULL,          [PasswordHash] nvarchar(max) NULL,          [PhoneNumber] nvarchar(max) NULL,          [PhoneNumberConfirmed] bit NOT NULL,          [SecurityStamp] nvarchar(max) NULL,          [TwoFactorEnabled] bit NOT NULL,          [UserName] nvarchar(256) NULL,          CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id])      );info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE TABLE [AspNetRoleClaims] (          [Id] int NOT NULL IDENTITY,          [ClaimType] nvarchar(max) NULL,          [ClaimValue] nvarchar(max) NULL,          [RoleId] nvarchar(450) NOT NULL,          CONSTRAINT [PK_AspNetRoleClaims] PRIMARY KEY ([Id]),          CONSTRAINT [FK_AspNetRoleClaims_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE      );info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE TABLE [AspNetUserClaims] (          [Id] int NOT NULL IDENTITY,          [ClaimType] nvarchar(max) NULL,          [ClaimValue] nvarchar(max) NULL,          [UserId] nvarchar(450) NOT NULL,          CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY ([Id]),          CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE      );info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE TABLE [AspNetUserLogins] (          [LoginProvider] nvarchar(450) NOT NULL,          [ProviderKey] nvarchar(450) NOT NULL,          [ProviderDisplayName] nvarchar(max) NULL,          [UserId] nvarchar(450) NOT NULL,          CONSTRAINT [PK_AspNetUserLogins] PRIMARY KEY ([LoginProvider], [ProviderKey]),          CONSTRAINT [FK_AspNetUserLogins_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE      );info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE TABLE [AspNetUserRoles] (          [UserId] nvarchar(450) NOT NULL,          [RoleId] nvarchar(450) NOT NULL,          CONSTRAINT [PK_AspNetUserRoles] PRIMARY KEY ([UserId], [RoleId]),          CONSTRAINT [FK_AspNetUserRoles_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE,          CONSTRAINT [FK_AspNetUserRoles_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE      );info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE INDEX [RoleNameIndex] ON [AspNetRoles] ([NormalizedName]);info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE INDEX [IX_AspNetRoleClaims_RoleId] ON [AspNetRoleClaims] ([RoleId]);info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE INDEX [IX_AspNetUserClaims_UserId] ON [AspNetUserClaims] ([UserId]);info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE INDEX [IX_AspNetUserLogins_UserId] ON [AspNetUserLogins] ([UserId]);info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE INDEX [IX_AspNetUserRoles_RoleId] ON [AspNetUserRoles] ([RoleId]);info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE INDEX [IX_AspNetUserRoles_UserId] ON [AspNetUserRoles] ([UserId]);info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE INDEX [EmailIndex] ON [AspNetUsers] ([NormalizedEmail]);info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      CREATE UNIQUE INDEX [UserNameIndex] ON [AspNetUsers] ([NormalizedUserName]);info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])      VALUES (N'00000000000000_CreateIdentitySchema', N'2.0.0-rtm-26452');Done.
View Code

然后我们去数据库就可以查看到我们创建的数据库和数据表了

接下来我们运行  dotnet run  来运行我们创建的mvc网站,发现已经实现了登录和注册,以及前后台验证

EF Core Migration

 手动命令行的方式

VSCode VS2017 说明
dotnet ef migrations add InitialCreate Add-Migration  对当前EF实体模型增加一个配置文件
dotnet ef database update Update-Database  对当前版本进行更新
dotnet ef migrations remove Remove-Migration  删除最新的Migration
dotnet ef database update LastGoodMigration Update-Database LastGoodMigration  对指定版本进行更新
dotnet ef migrations script Script-Migration  对当前更新生成一个sql的脚本,我们可以使用脚本到数据库取执行

 接下来我们实践一下,我们来操作一下数据库中的AspNetUsers表,我们打开项目中的ApplicationUser.cs,添加新属性NewColumn

然后我们使用命令  dotnet ef migrations add AddNewColumn  生成配置文件

这个时候数据库是没有进行更新的,我们只有执行  dotnet ef database update  命令才会更新到数据库

 

接下来我们继续打开项目中的ApplicationUser.cs,添加新属性Address

 

然后我们使用命令  dotnet ef migrations add AddAddress  生成配置文件

 

执行  dotnet ef database update  命令更新到数据库

 

接下来我们使用  dotnet ef database update AddNewColumn  就可以将数据库回滚到指定的版本

接下来执行  dotnet ef migrations remove  命令会将当前项目之后没有用的配置文件删除,我们这里执行后会将AddAddress配置文件删除

PS C:\Users\Administrator\Desktop\Demo2\IdentitySample> dotnet ef migrations removeinfo: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]      User profile is available. Using 'C:\Users\Administrator\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.info: Microsoft.EntityFrameworkCore.Infrastructure[100403]      Entity Framework Core 2.0.0-rtm-26452 initialized 'ApplicationDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: Noneinfo: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      SELECT OBJECT_ID(N'__EFMigrationsHistory');info: Microsoft.EntityFrameworkCore.Database.Command[200101]      Executed DbCommand (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30']      SELECT [MigrationId], [ProductVersion]      FROM [__EFMigrationsHistory]      ORDER BY [MigrationId];Removing migration '20180105053249_AddAddress'.Reverting model snapshot.Done.
View Code

我们可以用  dotnet ef migrations script  命令来生成sql脚本,我们可以将sql拷贝出来放在数据库取执行。

IF OBJECT_ID(N'__EFMigrationsHistory') IS NULLBEGIN    CREATE TABLE [__EFMigrationsHistory] (        [MigrationId] nvarchar(150) NOT NULL,        [ProductVersion] nvarchar(32) NOT NULL,        CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])    );END;GOCREATE TABLE [AspNetRoles] (    [Id] nvarchar(450) NOT NULL,    [ConcurrencyStamp] nvarchar(max) NULL,    [Name] nvarchar(256) NULL,    [NormalizedName] nvarchar(256) NULL,    CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id]));GOCREATE TABLE [AspNetUserTokens] (    [UserId] nvarchar(450) NOT NULL,    [LoginProvider] nvarchar(450) NOT NULL,    [Name] nvarchar(450) NOT NULL,    [Value] nvarchar(max) NULL,    CONSTRAINT [PK_AspNetUserTokens] PRIMARY KEY ([UserId], [LoginProvider], [Name]));GOCREATE TABLE [AspNetUsers] (    [Id] nvarchar(450) NOT NULL,    [AccessFailedCount] int NOT NULL,    [ConcurrencyStamp] nvarchar(max) NULL,    [Email] nvarchar(256) NULL,    [EmailConfirmed] bit NOT NULL,    [LockoutEnabled] bit NOT NULL,    [LockoutEnd] datetimeoffset NULL,    [NormalizedEmail] nvarchar(256) NULL,    [NormalizedUserName] nvarchar(256) NULL,    [PasswordHash] nvarchar(max) NULL,    [PhoneNumber] nvarchar(max) NULL,    [PhoneNumberConfirmed] bit NOT NULL,    [SecurityStamp] nvarchar(max) NULL,    [TwoFactorEnabled] bit NOT NULL,    [UserName] nvarchar(256) NULL,    CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id]));GOCREATE TABLE [AspNetRoleClaims] (    [Id] int NOT NULL IDENTITY,    [ClaimType] nvarchar(max) NULL,    [ClaimValue] nvarchar(max) NULL,    [RoleId] nvarchar(450) NOT NULL,    CONSTRAINT [PK_AspNetRoleClaims] PRIMARY KEY ([Id]),    CONSTRAINT [FK_AspNetRoleClaims_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE);GOCREATE TABLE [AspNetUserClaims] (    [Id] int NOT NULL IDENTITY,    [ClaimType] nvarchar(max) NULL,    [ClaimValue] nvarchar(max) NULL,    [UserId] nvarchar(450) NOT NULL,    CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY ([Id]),    CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE);GOCREATE TABLE [AspNetUserLogins] (    [LoginProvider] nvarchar(450) NOT NULL,    [ProviderKey] nvarchar(450) NOT NULL,    [ProviderDisplayName] nvarchar(max) NULL,    [UserId] nvarchar(450) NOT NULL,    CONSTRAINT [PK_AspNetUserLogins] PRIMARY KEY ([LoginProvider], [ProviderKey]),    CONSTRAINT [FK_AspNetUserLogins_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE);GOCREATE TABLE [AspNetUserRoles] (    [UserId] nvarchar(450) NOT NULL,    [RoleId] nvarchar(450) NOT NULL,    CONSTRAINT [PK_AspNetUserRoles] PRIMARY KEY ([UserId], [RoleId]),    CONSTRAINT [FK_AspNetUserRoles_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE,    CONSTRAINT [FK_AspNetUserRoles_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE);GOCREATE INDEX [RoleNameIndex] ON [AspNetRoles] ([NormalizedName]);GOCREATE INDEX [IX_AspNetRoleClaims_RoleId] ON [AspNetRoleClaims] ([RoleId]);GOCREATE INDEX [IX_AspNetUserClaims_UserId] ON [AspNetUserClaims] ([UserId]);GOCREATE INDEX [IX_AspNetUserLogins_UserId] ON [AspNetUserLogins] ([UserId]);GOCREATE INDEX [IX_AspNetUserRoles_RoleId] ON [AspNetUserRoles] ([RoleId]);GOCREATE INDEX [IX_AspNetUserRoles_UserId] ON [AspNetUserRoles] ([UserId]);GOCREATE INDEX [EmailIndex] ON [AspNetUsers] ([NormalizedEmail]);GOCREATE UNIQUE INDEX [UserNameIndex] ON [AspNetUsers] ([NormalizedUserName]);GOINSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])VALUES (N'00000000000000_CreateIdentitySchema', N'2.0.0-rtm-26452');GODROP INDEX [UserNameIndex] ON [AspNetUsers];GODROP INDEX [IX_AspNetUserRoles_UserId] ON [AspNetUserRoles];GODROP INDEX [RoleNameIndex] ON [AspNetRoles];GOALTER TABLE [AspNetUsers] ADD [NewColumn] nvarchar(max) NULL;GOCREATE UNIQUE INDEX [UserNameIndex] ON [AspNetUsers] ([NormalizedUserName]) WHERE [NormalizedUserName] IS NOT NULL;GOCREATE UNIQUE INDEX [RoleNameIndex] ON [AspNetRoles] ([NormalizedName]) WHERE [NormalizedName] IS NOT NULL;GOALTER TABLE [AspNetUserTokens] ADD CONSTRAINT [FK_AspNetUserTokens_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE;GOINSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])VALUES (N'20180105034732_AddNewColumn', N'2.0.0-rtm-26452');GO
View Code

 

转载于:https://www.cnblogs.com/wyt007/p/8203373.html

你可能感兴趣的文章
动态调用WCF服务
查看>>
oracle导出/导入 expdp/impdp
查看>>
类指针
查看>>
css修改滚动条样式
查看>>
2018.11.15 Nginx服务器的使用
查看>>
Kinect人机交互开发实践
查看>>
百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET...
查看>>
JAVA 技术类分享(二)
查看>>
android客户端向服务器发送请求中文乱码的问
查看>>
UOJ#220. 【NOI2016】网格 Tarjan
查看>>
Symfony翻译教程已开课
查看>>
Python模块之pickle(列表,字典等复杂数据类型与二进制文件的转化)
查看>>
通过数据库表反向生成pojo类
查看>>
css_去掉默认样式
查看>>
TensorFlow2.0矩阵与向量的加减乘
查看>>
NOIP 2010题解
查看>>
javascript中的each遍历
查看>>
String中各方法多数情况下返回新的String对象
查看>>
浅谈tcp粘包问题
查看>>
UVA11524构造系数数组+高斯消元解异或方程组
查看>>