EF Core Code First - 聚集索引和标识列 [英] EF Core Code First - Clustered Index and Identity Column
问题描述
我正在使用 EF Core 2.0 创建一个表,其中主键是 GUID
,聚集索引是一个自动递增的 INT
列.但我收到此错误:
I am using EF Core 2.0 to create a table in which the primary key is a GUID
and the clustered index is an auto-incrementing INT
column. But I'm getting this error:
不能在表 'Tenants' 上创建多个聚集索引.在创建另一个聚集索引之前删除现有的聚集索引 'PK_Tenants'
Cannot create more than one clustered index on table 'Tenants'. Drop the existing clustered index 'PK_Tenants' before creating another
这是创建实体和 Fluent API 的代码.
This is the code for creating entity and Fluent API.
Tenant.cs
public class Tenant : EntityBase
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ClusteredId { get; set; }
public new Guid TenantId { get; set; }
public string TenantCode { get; set; }
}
FluentAPI
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Tenant>().HasIndex(c => c.TenantId).ForSqlServerIsClustered(false);
builder.Entity<Tenant>().HasIndex(c => c.ClusteredId).HasName("ClusteredId").ForSqlServerIsClustered(true);
base.OnModelCreating(builder);
}
请建议如何消除此错误并为 GUID
创建主键和为自动递增 INT
列创建聚集索引.
Please suggest, how to remove this error and create primary key for GUID
and clustered index for auto-incrementing INT
column.
谢谢.
推荐答案
未明确维护 PK 索引.在 EF Core 中,它可以通过 KeyBuilder
fluent API 进行配置(注意用 HasKey
代替 HasIndex
):
The PK index is not maintained explicitly. In EF Core it can be configured via KeyBuilder
fluent API (note the HasKey
in place of HasIndex
):
builder.Entity<Tenant>().HasKey(c => c.TenantId).ForSqlServerIsClustered(false);
builder.Entity<Tenant>().HasIndex(c => c.ClusteredId).HasName("ClusteredId").ForSqlServerIsClustered(true);
这篇关于EF Core Code First - 聚集索引和标识列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!