Impostare un filtro fisso in fase di querying con Entity Framework Core 2.0

di Stefano Mostarda, in LINQ, Entity Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi