首页 > 解决方案 > 带有条件的 EF Core 迁移约束

问题描述

我有以下课程:

public class VerizonRequest
{
    public VerizonRequest()
    {
        CreatedDate = DateTime.UtcNow;
    }

    public int DeviceId { get; set; }
    public virtual Device Device { get; set; }

    public string AccountName { get; set; }
    public string RequestId { get; set; }

    public DateTime CreatedDate { get; set; }
    public DateTime? ResultDate { get; set; }
    public VerizonRequestStatus Status { get; set; } = VerizonRequestStatus.Pending;
    public VerizonRequestType RequestType { get; set; }
    public string Comment { get; set; }
}

和地图类:

public class VerizonRequestMap : IEntityTypeConfiguration<VerizonRequest>
{
    public void Configure(EntityTypeBuilder<VerizonRequest> builder)
    {
        builder.ToTable(nameof(VerizonRequest));
        builder.HasKey(d => d.RequestId);

        builder.HasOne(d => d.Device)
            .WithMany(d => d.VerizonRequests)
            .HasForeignKey(d => d.DeviceId);
    }
}

我想创建一个约束,如果已经有一条具有相同 DeviceId 和 Status = 'Pending' 的记录,它将无法为相同的 DeviceId 添加一条记录

所以,它应该是这样的:

builder.HasIndex(d => new { d.DeviceId, d.Status });

但仅当 Status = 'Pending' 时(对于 Status != 'Pending',与 DeviceId + Status 的对可以不止一个,但对于 'Pending' 只有一个)

可能吗?

标签: c#entity-frameworkentity-framework-coreef-core-3.1

解决方案


感谢@DavidG,HasFilter帮助我:

builder.HasIndex(d => new { d.DeviceId, d.Status }).HasFilter("[Status] = 1");

推荐阅读