如何阻止EF Core在可空列上创建过滤索引

g_b*_*g_b 10 entity-framework entity-framework-core ef-core-2.0

我有这个型号:

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; }
}
Run Code Online (Sandbox Code Playgroud)

并通过Fluent API配置索引:

entityBuilder.HasIndex(e => new { e.LevelId, e.Name, e.DeletedAt })
    .IsUnique();
Run Code Online (Sandbox Code Playgroud)

它正在创建一个具有唯一过滤索引的表.如何防止EF添加过滤器?我只想要索引,不要过滤它.

Iva*_*oev 18

创建筛选索引(不包括NULL值)是包含可空列的唯一索引的默认EF Core行为.

您可以使用HasFilter流利的API更改过滤条件或通过将关闭它nullsql参数:

entityBuilder.HasIndex(e => new { e.LevelId, e.Name, e.DeletedAt })
    .IsUnique()
    .HasFilter(null);
Run Code Online (Sandbox Code Playgroud)