【问题标题】:EF Core Code First - Clustered Index and Identity ColumnEF Core Code First - 聚集索引和标识列
【发布时间】:2018-05-16 05:02:45
【问题描述】:

我正在使用 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 列的聚集索引。

谢谢。

【问题讨论】:

  • modelBuilder.Entity&lt;Tenant&gt;().HasAlternateKey(t =&gt; t.TenantId); //Auto increment modelBuilder.Entity&lt;Tenant&gt;().HasKey(t =&gt; t.ClusteredId); 会为你工作

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 2015-07-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多