Entity Framework Core 2.0 introduce una nuova funzionalità chiamata Model Level Filter. Questa funzionalità permette di specificare su una entity un filtro da applicare sempre in fase di query. Poter specificare un filtro fisso torna comodo in almeno due casi: quando eseguiamo cancellazioni logiche dei record (cioè quando invece di cancellarli fisicamente li marchiamo come come cancellati) e quando abbiamo applicazioni multitenant dove su un database teniamo i dati di più clienti.
Il filtro va specificato in fase di mapping utilizzando il metodo HasQueryFilter e passando in input la lambda che specifica il filtro.
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Person>(entity => { entity.HasQueryFilter(e => !e.Deleted); } }
Una volta configurato il filtro, qualunque query impatti l'entity Person applicherà in filtro specificato. Il filtro viene applicato anche quando non si fa una query diretta sull'entity Person, ma la si referenzia soltanto (ad esempio tramite Include o tramite una navigation property).
Nei casi in cui vogliamo ignorare il filtro preimpostato, dobbiamo utilizzare il metodo IgnoreQueryFilters in fase di query.
var person = ctx.People.IgnoreQueryFilters().Where(p => p.Id == 1);
In questo esempio, viene restitutita la persona con id 1 anche se questa il campo Deleted è true.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Come EF 8 ha ottimizzato le query che usano il metodo Contains
- .NET Conference Italia 2023 - Milano e Online
- Ottimizzazione dei block template in Angular 17
- Definire stili a livello di libreria in Angular