全局查询筛选器
全局查询筛选器用于全局设置筛选数据的条件。常见的应用场景有:软删除,多租户,禁用,激活,多用户博客系统。 全局查询筛选器可以精简代码,可以提高代码质量 ,防止开发者忘记加条件。
public class Blog { private string _tenantId; public int BlogId { get; set; } public string Name { get; set; } public string Url { get; set; } public List<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public bool IsDeleted { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Blog>().Property<string> ("TenantId").HasField("_tenantId"); // Configure entity filters modelBuilder.Entity<Blog>() .HasQueryFilter(b => EF.Property<string>(b, "TenantId") == _tenantId); modelBuilder.Entity<Post>() .HasQueryFilter(p => !p.IsDeleted); }
全局筛选器支持导航属性数据的加载筛选。
禁用筛选器
可使用 IgnoreQueryFilters() 运算符对各个 LINQ 查询禁用筛选器。
var blogs = db.Blogs .Include(b => b.Posts) .IgnoreQueryFilters().ToList();
第三方开源方案