Blazor web App数据迁移——(三)
1 数据迁移命令
1.1 Add-Migration/Remove-Migration/Update-database/Script-Migration
1.2 Get-Help <cmdlet-name>
2 数据迁移命令Add-Migration指定输出目录
add-migration initDB01 -outputdir Data/Migrations
指定数据迁移文件输出到Data/Migrations目录下,如下


3 使用update-database
使用此命令生成数据库时,会读取appsettings.json文件中连接字符串,生成相应的数据库。如果对应的连接字符串没有赋值,则会给出报警:

4 列出迁移Get-Migration

5 列出迁移并移除最近迁移Get-Migration Remove-Migration
6 执行迁移命令遇到Build failed解决方法
检查是否为启动项+项目是否编译成功+检查ApplicationDbContext需要恢复到以前
7 运行异常:
System.InvalidOperationException:“Scheme already exists: Identity.Application”
builder.Services.AddIdentity<ApplicationUser, ApplicationRole>(options => { options.SignIn.RequireConfirmedAccount = true; options.SignIn.RequireConfirmedEmail = false; }).AddEntityFrameworkStores<ApplicationDbContext>() .AddSignInManager() .AddDefaultTokenProviders();

原因是与以下代码有重复,把这部分代码注释后,就可以运行正常了。
//builder.Services.AddAuthentication(MyAction).AddIdentityCookies(); // authentication //builder.Services // .AddAuthentication(options => //{ // options.DefaultScheme = IdentityConstants.ApplicationScheme; // options.DefaultSignInScheme = IdentityConstants.ExternalScheme; //}) //#region testAuthor // .AddCookie(options=> //{ // options.Cookie.Name = "auth"; // // return 401 if logout. // options.Events.OnRedirectToLogin = context => // { // context.Response.StatusCode = StatusCodes.Status401Unauthorized; // return Task.CompletedTask; // }; // //return 403 when unauthorized. // options.Events.OnRedirectToAccessDenied = context => // { // context.Response.StatusCode = StatusCodes.Status403Forbidden; // return Task.CompletedTask; // }; //}) //#endregion // .AddIdentityCookies();
8 以下是运行正常的代码
builder.Services.AddAuthentication(MyAction).AddIdentityCookies(); authentication builder.Services .AddAuthentication(options => { options.DefaultScheme = IdentityConstants.ApplicationScheme; options.DefaultSignInScheme = IdentityConstants.ExternalScheme; }) #region testAuthor .AddCookie(options => { options.Cookie.Name = "auth"; // return 401 if logout. options.Events.OnRedirectToLogin = context => { context.Response.StatusCode = StatusCodes.Status401Unauthorized; return Task.CompletedTask; }; //return 403 when unauthorized. options.Events.OnRedirectToAccessDenied = context => { context.Response.StatusCode = StatusCodes.Status403Forbidden; return Task.CompletedTask; }; }) #endregion .AddIdentityCookies();
builder.Services.AddIdentityCore<ApplicationUser>(options => { //options.SignIn.RequireConfirmedAccount = true; //options.SignIn.RequireConfirmedEmail = false; }).AddRoles<ApplicationRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddSignInManager() .AddDefaultTokenProviders();
浙公网安备 33010602011771号