EF Core 始终在添加迁移时创建 .Annotation("SqlServer:Identity", "1, 1")
EF Core always create .Annotation("SqlServer:Identity", "1, 1") on add-migration
我在使用 Migration EF Core 时遇到问题。
为了让场景更清晰,我将其分配给一个现有的数据库,该数据库旨在从现在开始使用迁移进行数据库控制。但是我遇到了困难。
到目前为止我做了什么。
我从现有数据库生成了脚手架。
我添加了迁移,因此它生成了用于创建数据库的所有 "Up"。
- 在干净的数据库中,运行 更新数据库。
到目前为止很完美,一切都按预期进行。但是从这一步开始,每次我生成一个新的迁移时,他(迁移)都坚持为所有 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+
在功能描述的元数据中是:
将 属性 配置为在保存此实体类型的实例时从不生成值。
我在使用 Migration EF Core 时遇到问题。
为了让场景更清晰,我将其分配给一个现有的数据库,该数据库旨在从现在开始使用迁移进行数据库控制。但是我遇到了困难。
到目前为止我做了什么。
我从现有数据库生成了脚手架。
我添加了迁移,因此它生成了用于创建数据库的所有 "Up"。
- 在干净的数据库中,运行 更新数据库。
到目前为止很完美,一切都按预期进行。但是从这一步开始,每次我生成一个新的迁移时,他(迁移)都坚持为所有 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+ 在功能描述的元数据中是: 将 属性 配置为在保存此实体类型的实例时从不生成值。