全局查询筛选器
全局查询筛选器用于全局设置筛选数据的条件。常见的应用场景有:软删除,多租户,禁用,激活,多用户博客系统。 全局查询筛选器可以精简代码,可以提高代码质量 ,防止开发者忘记加条件。
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();
第三方开源方案