Nello sviluppo di un applicazione è spesso necessario individuare delle condizioni particolari nella fase di interrogazione ad un database. Ad esempio, la cancellazione di un record potrebbe essere virtuale, impostando il valore di un campo (ad esempio isDeleted) a true. Tutte le query che interessano la tabella dovranno essere modificate per escludere tutti i records che hanno il valore true al campo interessato alla cancellazione logica. In questo ambito, le query filters di entity framework ci aiutano proprio a risolvere questo tipo di problema.
Le Query Filters in Entity Framework Core forniscono un modo per applicare un filtro globale a tutte le query di una determinata entity.
Quando viene definita una query filter, viene applicata automaticamente a tutte le query per quell’entità, senza la necessità di specificare esplicitamente la condizione del filtro in ciascuna query.
Per utilizzare i filtri di query in Entity Framework Core, è necessiario definire il filtro nel metodo OnModelCreating della classe DbContext utilizzando il metodo HasQueryFilter. Il metodo accetta un’espressione lambda che rappresenta la condizione del filtro.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>().HasQueryFilter(p => p.IsActive);
}Per disabilitare un filtro di query in Entity Framework Core, è possibile utilizzare il metodo IgnoreQueryFilters su un’istanza DbSet.
Il metodo IgnoreQueryFilters disabilita temporaneamente tutti i filtri di query definiti per il tipo di entità e consente di recuperare tutti i record senza applicare il filtro.
var allStudents = context.Students.IgnoreQueryFilters().ToList();
In questo modo è stato disabiliato temporaneamente il filtro per la query.