EF 6.2的多个复合索引

时间:2018-05-30 05:33:14

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

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

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列?我该如何解决?

1 个答案:

答案 0 :(得分:1)

EntityFramework github中存在一个当前未解决的问题:https://github.com/aspnet/EntityFramework6/issues/460

有一个PR尚未合并,以解决问题https://github.com/aspnet/EntityFramework6/pull/534。预期的发行版本是6.3.0。

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