EF Core Code First - 聚集索引和标识列

3
我正在使用EF Core 2.0创建一个表,其中主键是GUID,聚集索引是自增的INT列。但是我遇到了这个错误:
“无法在表'Tenants'上创建多个聚集索引。在创建另一个之前,请删除现有的聚集索引'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列创建聚集索引。
谢谢。

modelBuilder.Entity<Tenant>().HasAlternateKey(t => t.TenantId); //自动递增 modelBuilder.Entity<Tenant>().HasKey(t => t.ClusteredId); //适用于您 - Vivek Nuna
1个回答

4

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接