Impostare l'identity resolution a livello globale in una No-Tracking query di Entity Framework Core

di Stefano Mostarda, in LINQ, Entity Framework,

Nello script #564 abbiamo visto come usare il metodo AsNoTrackingWithIdentityResolution a per impostare il tracking delle entity a livello di query. Esistono applicazioni che fanno un enorme uso di query di sola lettura e che non hanno bisogno di modificare i dati o li modificano solo in pochissimi casi. Per questo genere di applicazioni può aver senso impostare come default il fatto di non eseguire il tracking delle entity e abilitre il tracking a livello di query solo dove necessario.

Per fare questo, per prima cosa dobbiamo impostare a livello di configurazione il comportamento di tutte le query tramite il metodo UseQueryTrackingBehavior.

public class MyContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTrackingWithIdentityResolution);
}

Se stiamo sviluppando una applicazione ASP.NET, usiamo il metodo AddDbContext in startup.

services.AddDbContext<MyContext>(c =>
{
  c.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTrackingWithIdentityResolution);
});

Ora che abbiamo impostato il nuovo comportamento di default per le query, per quelle dove vogliamo abilitare il tracking dobbiamo usare il metodo AsTracking.

var people = ctx.People
  .AsTracking()
  .Include(p => p.Children)
  .Where(c => c.CittaNascita == "Roma")
  .ToList();

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

I più letti di oggi