Entity framework core 实体框架核心在不更改域的情况下生成迁移

Entity framework core 实体框架核心在不更改域的情况下生成迁移,entity-framework-core,asp.net-core-identity,Entity Framework Core,Asp.net Core Identity,我有一个从IdentityDbContext派生的DbContext,但将默认的字符串user和role键更改为int。在创建初始迁移时,这很好。它也曾在很长一段时间内运行良好。但是,我已经有一段时间没有对域进行任何更改,并且已将解决方案升级到最新的.net 5版本。进行域更改后,应用迁移会在标识列上引发错误,必须删除并重新创建该列 我在重构项目时做了一些修改,所以我认为问题可能就出在这方面。因此,a还原了所有迁移更新迁移0,并删除了所有迁移,有效地获得了一个空数据库 现在我创建一个新的Init

我有一个从IdentityDbContext派生的DbContext,但将默认的字符串user和role键更改为int。在创建初始迁移时,这很好。它也曾在很长一段时间内运行良好。但是,我已经有一段时间没有对域进行任何更改,并且已将解决方案升级到最新的.net 5版本。进行域更改后,应用迁移会在标识列上引发错误,必须删除并重新创建该列

我在重构项目时做了一些修改,所以我认为问题可能就出在这方面。因此,a还原了所有迁移
更新迁移0
,并删除了所有迁移,有效地获得了一个空数据库

现在我创建一个新的
InitialCreate
迁移并应用它。很好

但是,如果我现在不使用tocuhing命令立即运行代码运行
添加迁移检查
,则会在AspNetUser和其他表上生成迁移

            migrationBuilder.AlterColumn<int>(
                name: "Id",
                table: "AspNetUsers",
                type: "int",
                nullable: false,
                oldClrType: typeof(int),
                oldType: "int")
                .Annotation("SqlServer:Identity", "1, 1");

            migrationBuilder.AlterColumn<int>(
                name: "Id",
                table: "AspNetUserClaims",
                type: "int",
                nullable: false,
                oldClrType: typeof(int),
                oldType: "int")
                .Annotation("SqlServer:Identity", "1, 1");

            migrationBuilder.AlterColumn<int>(
                name: "Id",
                table: "AspNetRoles",
                type: "int",
                nullable: false,
                oldClrType: typeof(int),
                oldType: "int")
                .Annotation("SqlServer:Identity", "1, 1");

            migrationBuilder.AlterColumn<int>(
                name: "Id",
                table: "AspNetRoleClaims",
                type: "int",
                nullable: false,
                oldClrType: typeof(int),
                oldType: "int")
                .Annotation("SqlServer:Identity", "1, 1");
migrationBuilder.AlterColumn(
姓名:“Id”,
表:“AspNetUsers”,
输入:“int”,
可为空:false,
oldClrType:typeof(int),
旧式:“int”)
注释(“SqlServer:Identity”、“1,1”);
migrationBuilder.AlterColumn(
姓名:“Id”,
表:“AspNetUserClaims”,
输入:“int”,
可为空:false,
oldClrType:typeof(int),
旧式:“int”)
注释(“SqlServer:Identity”、“1,1”);
migrationBuilder.AlterColumn(
姓名:“Id”,
表:“AspNetRoles”,
输入:“int”,
可为空:false,
oldClrType:typeof(int),
旧式:“int”)
注释(“SqlServer:Identity”、“1,1”);
migrationBuilder.AlterColumn(
姓名:“Id”,
表:“AspNetRoleClaims”,
输入:“int”,
可为空:false,
oldClrType:typeof(int),
旧式:“int”)
注释(“SqlServer:Identity”、“1,1”);
请注意,原始迁移中确实有注释,并且类型没有更改

            migrationBuilder.CreateTable(
                name: "AspNetUsers",
                columns: table => new
                {
                    Id = table.Column<int>(type: "int", nullable: false)
                        .Annotation("SqlServer:Identity", "1, 1"),
                    IsAdmin = table.Column<bool>(type: "bit", nullable: false),
                    UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                    NormalizedUserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                    Email = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                    NormalizedEmail = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                    EmailConfirmed = table.Column<bool>(type: "bit", nullable: false),
                    PasswordHash = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    SecurityStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    ConcurrencyStamp = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    PhoneNumber = table.Column<string>(type: "nvarchar(max)", nullable: true),
                    PhoneNumberConfirmed = table.Column<bool>(type: "bit", nullable: false),
                    TwoFactorEnabled = table.Column<bool>(type: "bit", nullable: false),
                    LockoutEnd = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
                    LockoutEnabled = table.Column<bool>(type: "bit", nullable: false),
                    AccessFailedCount = table.Column<int>(type: "int", nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_AspNetUsers", x => x.Id);
                });
migrationBuilder.CreateTable(
名称:“AspNetUsers”,
列:表=>new
{
Id=table.Column(类型:“int”,可为空:false)
.Annotation(“SqlServer:Identity”、“1,1”),
IsAdmin=table.Column(类型:“bit”,可为空:false),
UserName=table.Column(类型:“nvarchar(256)”,maxLength:256,nullable:true),
NormalizedUserName=table.Column(类型:“nvarchar(256)”,maxLength:256,null:true),
Email=table.Column(类型:“nvarchar(256)”,最大长度:256,可空值:true),
NormalizedEmail=table.Column(类型:“nvarchar(256)”,maxLength:256,nullable:true),
emailconfirm=table.Column(类型:“bit”,可为空:false),
PasswordHash=table.Column(类型:“nvarchar(max)”,可为null:true),
SecurityStamp=table.Column(类型:“nvarchar(max)”,可为null:true),
ConcurrencyStamp=table.Column(类型:“nvarchar(max)”,可为null:true),
PhoneNumber=table.Column(类型:“nvarchar(max)”,可为空:true),
PhoneNumberConfiged=table.Column(类型:“bit”,可为空:false),
TwoFactorEnabled=table.Column(类型:“bit”,可为空:false),
LockoutEnd=table.Column(类型:“datetimeoffset”,可为空:true),
LockoutEnabled=table.Column(类型:“bit”,可为空:false),
AccessFailedCount=table.Column(类型:“int”,可空:false)
},
约束:表=>
{
表.PrimaryKey(“PK_AspNetUsers”,x=>x.Id);
});
我无法解释为什么要创建迁移

更新-我试图用一个测试项目来复制这个问题,但没有成功。在我的解决方案中,一个项目中有DbContext,另一个项目中有域模型。随后,我将所有DbContext管道移动到域模型项目,并且在应用初始迁移后不再创建迁移—我的问题已解决,但找不到真正的原因