Panoramica della registrazione e dell'intercettazione

Entity Framework Core (EF Core) contiene molti meccanismi per generare log, rispondere agli eventi e acquisire dati di diagnostica. Ognuno di questi meccanismi è studiato per situazioni diverse ed è importante selezionare il meccanismo più adatto all'attività interessata, anche quando più meccanismi potrebbero funzionare. È ad esempio possibile usare un intercettatore di database per registrare codice SQL, ma questa operazione sarebbe gestita meglio da uno dei meccanismi studiati appositamente per la registrazione. Questa pagina presenta una panoramica di ciascuno di questi meccanismi e spiega qual è l'utilizzo migliore di ognuno.

Riferimento rapido

La tabella seguente fornisce un riferimento rapido in merito alle differenze tra i meccanismi descritti qui.

Meccanismo Async Ambito Registrato Uso previsto
Registrazione semplice No Per contesto Configurazione nel contesto Registrazione nella fase di sviluppo
Microsoft.Extensions.Logging No Per contesto* I.D. o configurazione del contesto Registrazione di produzione
Eventi No Per contesto In qualsiasi momento Reazione agli eventi EF
Intercettori Per contesto Configurazione nel contesto Manipolazione delle operazioni EF
Listener di diagnostica No Elaborazione A livello globale Diagnostica applicazioni

*In genere Microsoft.Extensions.Logging è configurato in base all'applicazione tramite l'inserimento delle dipendenze. Tuttavia, a livello di EF, ogni contesto può essere configurato all'occorrenza con un logger diverso.

Registrazione semplice

È possibile accedere ai log di EF Core da qualsiasi tipo di applicazione tramite l'uso di LogTo quando si configura un'istanza di DbContext. Questa configurazione viene eseguita in genere in un override di DbContext.OnConfiguring. Ad esempio:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder.LogTo(Console.WriteLine);

Questo concetto è simile a Database.Log in EF6.

Per altre informazioni, vedere Registrazione semplice.

Microsoft.Extensions.Logging

Microsoft.Extensions.Logging è un meccanismo di registrazione estendibile con provider di plug-in per molti sistemi di registrazione di uso comune. EF Core si integra completamente con Microsoft.Extensions.Logging e questa forma di registrazione viene usata per impostazione predefinita per le applicazioni ASP.NET Core.

Per altre informazioni, vedere Uso di Microsoft.Extensions.Logging in EF Core.

Eventi

EF Core espone gli eventi .NET in modo che agiscano come callback quando si verificano determinate situazioni nel codice EF Core. Gli eventi sono più semplici degli intercettori e consentono una registrazione più flessibile. Tuttavia, sono solo sincronizzati e quindi non possono eseguire operazioni di I/O asincrone non bloccabili.

Gli eventi vengono registrati per istanza di DbContext e questa registrazione può essere eseguita in qualsiasi momento. Usare un listener di diagnostica per ottenere le stesse informazioni, ma per tutte le istanze di DbContext nel processo.

Per altre informazioni, vedere Eventi .NET in EF Core.

Interception

Gli intercettori EF Core consentono l'intercettazione, la modifica e/o l'eliminazione di operazioni di EF Core. Sono incluse le operazioni di database di basso livello, ad esempio l'esecuzione di un comando, nonché operazioni di livello superiore, ad esempio le chiamate a SaveChanges.

Gli intercettori sono diversi dalla registrazione e dalla diagnostica per il fatto che consentono la modifica o l'eliminazione dell'operazione intercettata. L'uso della registrazione semplice o di Microsoft.Extensions.Logging è una scelta migliore per la registrazione.

Gli intercettori vengono registrati per ogni istanza di DbContext quando il contesto è configurato. Usare un listener di diagnostica per ottenere le stesse informazioni, ma per tutte le istanze di DbContext nel processo.

Per altre informazioni, vedere Intercettazione.

Listener diagnostici

I listener di diagnostica consentono l'ascolto di qualsiasi evento di EF Core che si verifica nel processo .NET corrente.

I listener di diagnostica non sono adatti per ottenere eventi da una singola istanza di DbContext. Gli intercettori di EF Core forniscono l'accesso agli stessi eventi con la registrazione per contesto.

I listener di diagnostica non sono progettati per la registrazione. L'uso della registrazione semplice o di Microsoft.Extensions.Logging è una scelta migliore per la registrazione.

Per altre informazioni, vedere Uso dei listener di diagnostica in EF Core.