如何在 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();
}
我以前在 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();
}