首页 > 解决方案 > EF Core Code First - 聚集索引和标识列

问题描述

我正在使用 EF Core 2.0 创建一个表,其中主键是 aGUID并且聚集索引是一个自动递增的INT列。但我收到了这个错误:

无法在表“租户”上创建多个聚集索引。在创建另一个之前删除现有的聚集索引“PK_Tenants”

这是创建实体和 Fluent API 的代码。

租户.cs

public class Tenant : EntityBase
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ClusteredId { get; set; }
    public new Guid TenantId { get; set; }

    public string TenantCode { get; set; }
}

流利的API

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

谢谢。

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

解决方案


PK 指数没有明确维护。在 EF Core 中,它可以通过KeyBuilderfluent API 进行配置(注意HasKey代替HasIndex):

    builder.Entity<Tenant>().HasKey(c => c.TenantId).ForSqlServerIsClustered(false);
    builder.Entity<Tenant>().HasIndex(c => c.ClusteredId).HasName("ClusteredId").ForSqlServerIsClustered(true);

推荐阅读