Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I stop EF Core from creating a filtered index on a nullable column

I have this model:

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; }
}

And index configured via Fluent API:

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

It's creating a table with a unique filtered index. How can I prevent EF from adding the filter? I just want the index and don't want it filtered.

like image 646
g_b Avatar asked Dec 30 '17 01:12

g_b


1 Answers

Creating filtered index excluding NULL values is the default EF Core behavior for unique indexes containing nullable columns.

You can use HasFilter fluent API to change the filter condition or turn it off by passing null as sql argument:

entityBuilder.HasIndex(e => new { e.LevelId, e.Name, e.DeletedAt })
    .IsUnique()
    .HasFilter(null);
like image 157
Ivan Stoev Avatar answered Oct 15 '22 13:10

Ivan Stoev