【问题标题】:Multiple composite indexes with EF 6.2EF 6.2 的多个复合索引
【发布时间】:2018-11-08 20:30:36
【问题描述】:

拥有这个实体和地图(简化):

public class Payment {
    public Guid Id { get; set; }
    public Guid TenantId { get; set; }
    public string ExternalPaymentId { get; set; }
    public string PaymentId { get; set; }
    public Tenant Tenant { get; set; }
}

modelBuilder.Entity<Payment>().HasKey(e => new { e.TenantId, e.Id },
    config => config.IsClustered(true));
modelBuilder.Entity<Payment>().HasIndex(e => new { e.TenantId, e.ExternalPaymentId })
    .IsUnique(true);
modelBuilder.Entity<Payment>().HasIndex(e => new { e.TenantId, e.PaymentId })
    .IsUnique(true);

EF 生成以下迁移:

CreateTable(
    "dbo.Payments",
    .............................
    .PrimaryKey(t => new { t.TenantId, t.Id })
    .Index(t => new { t.TenantId, t.PaymentId }, unique: true)
    .Index(t => t.ExternalPaymentId, unique: true, name: "IX_TenantId_ExternalPaymentId");

为什么它不在第二个索引中包含TenantId 列?我该如何解决?

【问题讨论】:

    标签: c# sql .net indexing entity-framework-6


    【解决方案1】:

    EntityFramework github 中有一个针对您的问题的当前未解决问题:https://github.com/aspnet/EntityFramework6/issues/460

    有一个尚未合并的 PR 来解决问题 https://github.com/aspnet/EntityFramework6/pull/534。预计发布版本为6.3.0。

    您目前可能希望手动编写迁移以解决该问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2018-11-21
      • 1970-01-01
      • 2016-10-19
      • 2019-12-31
      相关资源
      最近更新 更多