實體框架7身份種子


我們在EF7中使用Code First,我想添加一個具有Identity Seed的列,該另一個值為1。

目前,我們可以在遷移過程中通過EntityTypeBuilder將其設置為自動增量:

entityBuilder.Property(e => e.PropertyName).ValueGeneratedOnAdd();

但是我無法找到如何更改身份種子。它是否仍然需要像其他版本的EF一樣更新?例如,編寫一些自定義的SQL並在遷移期間運行它?

如何在實體框架代碼中首先為幾個表生成標識種子值

如何使用SQL Compact 4首先使用Entity Framework 4代碼在ID列上設置Identity種子?

在EF7中,似乎沒有SqlServerMigrationSqlGenerator > override Generate(AltherTableOperation alterTableOperation)代碼SqlServerMigrationSqlGenerator > override Generate(AltherTableOperation alterTableOperation)

一般承認的答案

在Entity Framework Core中使用Up方法中的Sql命令:

重要部分: 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");
        }
    }
}

熱門答案

是的,您必須編寫所需的SQL語句來設置種子,然後在遷移中使用Sql方法。





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因