EF Core 始终在添加迁移时创建 .Annotation("SqlServer:Identity", "1, 1")

EF Core always create .Annotation("SqlServer:Identity", "1, 1") on add-migration

我在使用 Migration EF Core 时遇到问题。

为了让场景更清晰,我将其分配给一个现有的数据库,该数据库旨在从现在开始使用迁移进行数据库控制。但是我遇到了困难。

到目前为止我做了什么。

  1. 我从现有数据库生成了脚手架。

  2. 我添加了迁移,因此它生成了用于创建数据库的所有 "Up"。

  3. 在干净的数据库中,运行 更新数据库。

到目前为止很完美,一切都按预期进行。但是从这一步开始,每次我生成一个新的迁移时,他(迁移)都坚持为所有 table 创建一个 Alter Column 语句。例如:

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

创作table

  migrationBuilder.CreateTable(
            name: "tb_rac_raca",
            columns: table => new
            {
                rac_n_codigo = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:Identity", "1, 1"),
                rac_c_nome = table.Column<string>(unicode: false, nullable: true),
                rac_d_alteracao = table.Column<DateTime>(type: "date", nullable: true),
                rac_c_usuario = table.Column<string>(unicode: false, nullable: true),
                rac_c_tipo = table.Column<string>(unicode: false, nullable: true),
                rac_d_modificacao = table.Column<DateTime>(type: "datetime", nullable: true),
                rac_c_unique = table.Column<Guid>(nullable: false, defaultValueSql: "(newid())"),
                rac_d_atualizado = table.Column<DateTime>(type: "datetime", nullable: false, defaultValueSql: "(getdate())"),
                rac_d_inclusao = table.Column<DateTime>(type: "datetime", nullable: false, defaultValueSql: "(getdate())")
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_tb_rac_raca", x => x.rac_n_codigo);
            });

假设您使用的是 Core 3.0 或 Core 3.1!

添加包Microsoft.EntityFrameworkCore.Relational

此外,您可能需要在映射中明确指定标识列。

builder.Property(o => o.Id).ValueGeneratedOnAdd().UseIdentityColumn();

我使用 ValueGeneratedNever():

_ = builder.Property(x => x.Id).IsRequired().ValueGeneratedNever();

EF 核心 5+ 在功能描述的元数据中是: 将 属性 配置为在保存此实体类型的实例时从不生成值。