添加迁移时,IdentityServer DB 上的 EF Core 迁移适用于 MULTIPLE 表而不是仅 AspNetUsers 表

Posted

技术标签:

【中文标题】添加迁移时,IdentityServer DB 上的 EF Core 迁移适用于 MULTIPLE 表而不是仅 AspNetUsers 表【英文标题】:EF Core Migration on IdentityServer DB applies for MULTIPLE tables instead of ONLY AspNetUsers table when adding the migration 【发布时间】:2022-01-13 05:49:19 【问题描述】:

我想在我的 AspNetUsers 表中添加一个新字段。我想通过 EF 迁移来做到这一点。

在我的 InitialCreate 迁移中,我只添加了 FullName(表中的最后一个字段)——它已成功构建。

在我的第二次迁移中,我想添加另一个字段。我更新了派生自 IdentityUser 的 ApplicationUser

public class ApplicationUser : IdentityUser

    [Column(TypeName = "nvarchar(150)")]
    public string FullName  get; set; 

    public string RefreshTokensAuth  get; set; 

问题是我在 PM 中运行命令后:

PM> Add-Migration -Context AuthenticationContext AddUsersSession

我的迁移包含对其他表的修改,如下所示(AspNetUserTokens、AspNetUserLogins),不仅仅是对 AspNetUsers:

public partial class AddUsersSession : Migration

    protected override void Up(MigrationBuilder migrationBuilder)
    
        migrationBuilder.AlterColumn<string>(
            name: "Name",
            table: "AspNetUserTokens",
            maxLength: 128,
            nullable: false,
            oldClrType: typeof(string),
            oldType: "nvarchar(450)");

        migrationBuilder.AlterColumn<string>(
            name: "LoginProvider",
            table: "AspNetUserTokens",
            maxLength: 128,
            nullable: false,
            oldClrType: typeof(string),
            oldType: "nvarchar(450)");

        migrationBuilder.AlterColumn<string>(
            name: "FullName",
            table: "AspNetUsers",
            type: "nvarchar(150)",
            nullable: true,
            oldClrType: typeof(string),
            oldType: "nvarchar(150",
            oldNullable: true);

        migrationBuilder.AddColumn<string>(
            name: "RefreshTokensAuth",
            table: "AspNetUsers",
            nullable: true);

        migrationBuilder.AlterColumn<string>(
            name: "ProviderKey",
            table: "AspNetUserLogins",
            maxLength: 128,
            nullable: false,
            oldClrType: typeof(string),
            oldType: "nvarchar(450)");

        migrationBuilder.AlterColumn<string>(
            name: "LoginProvider",
            table: "AspNetUserLogins",
            maxLength: 128,
            nullable: false,
            oldClrType: typeof(string),
            oldType: "nvarchar(450)");
    

    protected override void Down(MigrationBuilder migrationBuilder)
    
        migrationBuilder.DropColumn(
            name: "RefreshTokensAuth",
            table: "AspNetUsers");

        migrationBuilder.AlterColumn<string>(
            name: "Name",
            table: "AspNetUserTokens",
            type: "nvarchar(450)",
            nullable: false,
            oldClrType: typeof(string),
            oldMaxLength: 128);

        migrationBuilder.AlterColumn<string>(
            name: "LoginProvider",
            table: "AspNetUserTokens",
            type: "nvarchar(450)",
            nullable: false,
            oldClrType: typeof(string),
            oldMaxLength: 128);

        migrationBuilder.AlterColumn<string>(
            name: "FullName",
            table: "AspNetUsers",
            type: "nvarchar(150",
            nullable: true,
            oldClrType: typeof(string),
            oldType: "nvarchar(150)",
            oldNullable: true);

        migrationBuilder.AlterColumn<string>(
            name: "ProviderKey",
            table: "AspNetUserLogins",
            type: "nvarchar(450)",
            nullable: false,
            oldClrType: typeof(string),
            oldMaxLength: 128);

        migrationBuilder.AlterColumn<string>(
            name: "LoginProvider",
            table: "AspNetUserLogins",
            type: "nvarchar(450)",
            nullable: false,
            oldClrType: typeof(string),
            oldMaxLength: 128);
    

当然,当我跑步时

update-database -context AuthenticationContext

我遇到了错误。

有人经历过吗?任何提示都会有所帮助。谢谢!

【问题讨论】:

你可以试试 PM> Add-Migration "UniqueMigrationName" 而不指定上下文吗? @PramiGawande - 我会在一分钟内完成,但我有另一个我使用的数据库的上下文...我不确定它是否会有所帮助。 好的。我假设你只有一个上下文。 【参考方案1】:

更新:

我发现我的 InitialCreate 迁移有一些问题。

我通过运行 Add-Migration 进行了复制,但没有对 IdentityUser 模型进行任何更改,但仍然得到了 Up 和 Down 自动生成的更改。

为了解决这个问题,我像以前一样运行了 Add-Migration,通过删除将更新不应该更新的表的字段(代码行)来更改迁移,然后运行

Update-Database -Context AuthenticationContext

下一次迁移(如果您打算进行其他迁移)将运行得很好,就像我进行了进一步的测试和检查一样。

谢谢!

【讨论】:

以上是关于添加迁移时,IdentityServer DB 上的 EF Core 迁移适用于 MULTIPLE 表而不是仅 AspNetUsers 表的主要内容,如果未能解决你的问题,请参考以下文章

使用 WebDeploy 发布 Web 应用程序时如何在 DB 上自动运行 Code First 迁移

如何在 IdentityServer4 上添加电话号码声明

zabbix server 数据库迁移

Django DB 迁移添加新列,但不要编辑表中已有的值

IdentityServer4 + SignalR Core +RabbitMQ 构建web即时通讯

非中断业务数据库迁移一例