Как запретить EF Core создавать отфильтрованный индекс для столбца, допускающего значение NULL

У меня есть эта модель:

public class Subject
{
    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    public int LevelId { get; set; }

    [ForeignKey("LevelId")]
    public Level Level { get; set; }

    [Column(TypeName = "datetime2")]
    public DateTime? DeletedAt { get; set; }
}

И индекс, настроенный через Fluent API:

entityBuilder.HasIndex(e => new { e.LevelId, e.Name, e.DeletedAt })
    .IsUnique();

Он создает таблицу с уникальным отфильтрованным индексом. Как я могу запретить EF добавлять фильтр? Я просто хочу индекс и не хочу его фильтровать.


person g_b    schedule 30.12.2017    source источник


Ответы (1)


Создание отфильтрованного индекса, исключающего значения NULL, — это поведение EF Core по умолчанию для уникальных индексов, содержащих столбцы, допускающие значение NULL.

Вы можете использовать HasFilter Fluent API, чтобы изменить условие фильтра или отключить его, передав null в качестве аргумента sql:

entityBuilder.HasIndex(e => new { e.LevelId, e.Name, e.DeletedAt })
    .IsUnique()
    .HasFilter(null);
person Ivan Stoev    schedule 30.12.2017