代码之家  ›  专栏  ›  技术社区  ›  g_b

如何阻止EF Core在可空列上创建筛选索引

  •  23
  • g_b  · 技术社区  · 7 年前

    我有这个型号:

    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添加过滤器?我只需要索引,不需要过滤。

    1 回复  |  直到 7 年前
        1
  •  35
  •   Ivan Stoev    7 年前

    创建筛选索引排除 NULL 值是的默认EF核心行为 唯一的 包含可空列的索引。

    您可以使用 HasFilter fluent API更改过滤器条件或通过 null sql 参数:

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