Entity Framework Core 2 – Global filters on queries
Entity Framework Core 2 was released on August 14th. It brought new features.
On this article I will explain one of them : Global filters on queries
They are useful in essentially two scenarios:
-
For multitenant apps
-
For soft deletes
But they are useful for many other scenarios, like in a product list query, we want also to display anytime only products that are not free: (cost > 0)
public class ProductConfiguration : IEntityTypeConfiguration<Product>
{
public TenantId {get; set;}
public void Configure(EntityTypeBuilder<Product> builder)
{
builder.HasKey(x => x.ProductID);
builder.HasQueryFilter(o => o.Cost > 0); // non free products
builder.HasQueryFilter(o => o.TenantId > this.TenantId ); // manage tenants products
builder.HasQueryFilter(o => !o.IsDeleted ); // manage non deleted products with soft delete
builder.ToTable("Product");
}
}
It’s possible to ignore this filters on some queries using IgnoreQueryFilters() extension method:
public IQueryable<Product> GetTopProducts()
{
return _context.Products
.IgnoreQueryFilters()
.Take(50);
}
Nice isn’it ? 🙂