如何在 Entity Framework Core 中使用 VARCHAR 或 NVARCHAR 自动递增 Id?

How to auto increment Id with VARCHAR or NVARCHAR in Entity Framework Core?

我以前在 SQL 代码中使用复合列来做到这一点。

[ID] [int] IDENTITY(1,1) NOT NULL,
[PreFix] [varchar](50) NOT NULL,
[EmployeeNo]  AS ([PreFix]+ RIGHT('0000000' + CAST(Id AS VARCHAR(7)), 7)) PERSISTED,

主要有不同的解决方法,最简单的方法是修改 OnModelCreating 方法以在计算列上使用流畅的 API 函数之一 HasComputedColumnSql

代码优先方法

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Employee>()
    .Property(e => e.EmployeeNo)
    .HasComputedColumnSql("[PreFix]+ RIGHT('0000000' + CAST(Id AS VARCHAR(7)), 7)");
}

数据库优先方法

对于数据库优先方法,您仍然可以在创建 table 时定义计算逻辑,并在 entity framework 核心的上下文中使用以下修改。

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Contact>()
            .Property(p => p.EmployeeNo)
            .ValueGeneratedOnAdd();
    }