全局查询筛选器

全局查询筛选器:EF Core会自动将这个查询筛选器应用于涉及这个实体类型的所有LINQ查询。
场景:软删除、多租户。

用法

向配置类添加
builder.HasQueryFilter(b=>b.IsDeleted==false);

1
2
3
4
5
6
7
8
public class ArticleConfig : IEntityTypeConfiguration<Article>
{
public void Configure(EntityTypeBuilder<Article> builder)
{
builder.ToTable("T_Articles");
builder.HasQueryFilter(a => a.IsDeleted==false);
}
}

忽略全局筛选器

ctx.Articles.IgnoreQueryFilters();

1
2
3
4
5
6
7
8
9
10
static void Main(string[] args) {
using (var ctx = new MyDbContext()) {
foreach (var item in ctx.Articles.Where(a => a.Id > 3)) {
Console.WriteLine(item.Title);
}
foreach (var item in ctx.Articles.IgnoreQueryFilters().Where(a => a.Id > 3)) {
Console.WriteLine(item.Title);
}
}
}

全局筛选器可能会有性能缺陷的陷阱。