我们正在使用EF7的Code First,我想添加一个具有从另一个值开始的身份种子的列。
目前,我们可以使用以下命令在迁移过程中通过EntityTypeBuilder将其设置为自动增量:
entityBuilder.Property(e => e.PropertyName).ValueGeneratedOnAdd();
但是我无法找到如何更改身份种子。它是否仍然需要像其他版本的EF一样更新?例如编写一些自定义sql并在迁移期间运行它?
How to seed identity seed value in entity framework code first for several tables
How do I set Identity seed on an ID column using Entity Framework 4 code first with SQL Compact 4?
在EF7中似乎没有SqlServerMigrationSqlGenerator > override Generate(AltherTableOperation alterTableOperation)
的代码?
答案 0 :(得分:3)
In Entity Framework Core Use Sql
Command in Up
method:
Important Part:
migrationBuilder.Sql("DBCC CHECKIDENT ('Payment', RESEED, 1000000)");
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using System;
namespace PaymentService.Migrations
{
public partial class Initial : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Payment",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
},
constraints: table =>
{
table.PrimaryKey("PK_Payment", x => x.Id);
});
// Below code is for seeding the identity
migrationBuilder.Sql("DBCC CHECKIDENT ('Payment', RESEED, 1000000)");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(name: "Payment");
}
}
}
答案 1 :(得分:3)
更新2020 。
在EF Core 3.0之后,您有了 UseIdentityColumn 扩展方法,可用于设置标识列的种子值和增量值。
builder.Property(prop => prop.Id)
.UseIdentityColumn(10000000, 1);
根据官方文档:
UseIdentityColumn将键属性配置为在定位SQL Server时使用SQL Server IDENTITY功能为新实体生成值。此方法将属性设置为OnAdd。
答案 2 :(得分:0)
是的,您必须编写所需的SQL语句来设置种子,然后在迁移中使用Sql方法。
答案 3 :(得分:0)
如果您使用 MySQL 而不是 SQL Server,添加以下内容代替第一个答案中的 "migrationBuilder.Sql("DBCC CHECKIDENT ('Payment', RESEED, 1000000)");"
:
migrationBuilder.Sql("use db_name; ALTER TABLE Clients AUTO_INCREMENT = start_value;");