全局查询筛选器
全局查询筛选器: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); } } }
|
全局筛选器可能会有性能缺陷的陷阱。