身份迁移无故更改 AspNetUserTokens 和 AspNetUserLogins

use*_*434 5 entity-framework-core entity-framework-migrations

我使用 Entity Framework 3.1 构建了一个解决方案。第一次迁移顺利进行。第二次迁移无缘无故地神秘地更改了 AspNetUserTokens 和 AspNetUserLogins 表中的列。我在迁移中添加与这些表无关的表。

迁移文件中的代码如下:

    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: "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)");
Run Code Online (Sandbox Code Playgroud)

包管理器控制台中的 Update-Database 命令失败,因为列宽已以不一致的方式更改。有谁知道这里发生了什么以及如何解决它?

这是一个真正的表演障碍。

感谢您的帮助。

小智 0

对于遇到这个问题的其他人,我在添加自定义身份用户类型时遇到了这个问题。可以MaxLengthForKeys在注册Identity时设置Startup.cs,例如:

services.AddDefaultIdentity<ApplicationUser>(options => {
    options.SignIn.RequireConfirmedAccount = true;
    options.Stores.MaxLengthForKeys = 128;
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
Run Code Online (Sandbox Code Playgroud)

如果您随后恢复数据库上下文模型快照 cs 文件,然后重新构建迁移,则生成的迁移不应更改这些列长度 - 当然假设之前的默认值是 128。