我使用EF Core 2.0创建一个表,其中主键是GUID
,聚簇索引是一个自动递增INT
列。但是我收到了这个错误:
无法在表格'租户'上创建多个聚集索引。删除现有的聚集索引' PK_Tenants'在创建另一个
之前
这是用于创建实体和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
列创建聚簇索引。
感谢。
答案 0 :(得分:2)
未明确维护PK索引。在EF Core中,可以通过KeyBuilder
流畅的API进行配置(注意HasKey
代替HasIndex
):
builder.Entity<Tenant>().HasKey(c => c.TenantId).ForSqlServerIsClustered(false);
builder.Entity<Tenant>().HasIndex(c => c.ClusteredId).HasName("ClusteredId").ForSqlServerIsClustered(true);