EF核心代码优先 - 聚集索引和身份列

时间:2018-05-16 05:02:46

标签: entity-framework .net-core entity-framework-core

我使用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列创建聚簇索引。

感谢。

1 个答案:

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