【EFCORE笔记】全局查询筛选器

全局查询筛选器

 全局查询筛选器用于全局设置筛选数据的条件。常见的应用场景有:软删除,多租户,禁用,激活,多用户博客系统。    全局查询筛选器可以精简代码,可以提高代码质量 ,防止开发者忘记加条件。

 

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();

  

第三方开源方案

Soft Delete using Query Filters

 

AbpDbContext.cs

 

EntityFramework Core 2.0全局过滤

 

posted @ 2021-03-30 23:43  LBO.net  阅读(272)  评论(0编辑  收藏  举报
//返回顶部