目录
概述
用法
添加全局查询筛选器
禁用全局查询筛选器
概述
全局查询筛选器:EF Core 会自动将这个查询筛选器应用于涉及这个实体类型的所有 LINQ 查询。
场景:软删除、多租户。
什么是软删除?
逻辑删除,并不是真正地从数据库中把记录删除,而是通过特定的标记方式在查询的时候将此记录过滤掉。虽然数据在界面上已经看不见,但是数据库还是存在的。
用法
添加全局查询筛选器
在BookConfig中添加全局查询筛选器
builder.HasQueryFilter(b=>b.IsDeleted==false);
运行代码,查询会自动加上全局查询条件
static async Task Main(string[] args)
{
using (MyDbContext ctx = new MyDbContext())
{
foreach (var b in ctx.Books.Take(6))
{
Console.WriteLine($"{b.Id},{b.Price}");
}
}
}
禁用全局查询筛选器
用IgnoreQueryFilters()禁用全局查询筛选器
static async Task Main(string[] args)
{
using (MyDbContext ctx = new MyDbContext())
{
foreach (var b in ctx.Books.IgnoreQueryFilters().Take(6))
{
Console.WriteLine($"{b.Id},{b.Price}");
}
}
}