Nello sviluppo, quando si utilizza il framework core EF, quando si usano espressioni linq o lambda, non possiamo visualizzare direttamente le istruzioni SQL, il che è scomodo per noi per risolvere problemi o ottimizzare le prestazioni.
Questo articolo usa EF Core 5 come esempioper visualizzare le istruzioni SQL generate dall'EF di output.
Per prima cosa, crea una nuova variabile di fabbrica consolelogger nel file di avvio con la variabile "ConsoleLoggerFactory", e l'istruzione sql generata verrà inviata alla console, il codice è il seguente:
Aggiungi l'output del log al metodo ConfigureServices configurando il codice DbContext come segue:
Avvia il progetto e guarda il risultato della console come segue:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Eseguito DbCommand (1ms) [Parametri=[], CommandType='Text', CommandTimeout='30'] SELEZIONA [a]. [Id], [a]. [Disabile], [a]. [Link], [a]. [Nome], [a]. [PinYin], [a]. [Posizione], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] DA [Area] COME [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Eseguito DbCommand (19ms) [Parametri=[p0='?' (Dimensione = 4000)], TipoComando='Testo', TempoComando Smitenza='30'] SELEZIONA * DA Area DOVE pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Eseguito DbCommand (1ms) [Parametri=[], CommandType='Text', CommandTimeout='30'] SELEZIONA * DALL'Area
Se l'istruzione SQL con la condizione where può visualizzare solo le variabili parametrizzate, non i valori specifici passati, viene aggiunta la seguente configurazione:
Abilita l'inclusione dei dati applicativi nei messaggi di eccezione, nei log e altro.
Questo può includere valori assegnati alle proprietà dell'istanza dell'entità,
valori dei parametri dei comandi inviati al database e altri dati simili.
Questa bandiera dovrebbe essere attivata solo se sono previste misure di sicurezza
In base alla sensibilità di questi dati.
Nota se la domanda sta andando avanti
Chiama il generatore Microsoft.EntityFrameworkCore.DbContextOptions.UseInternalServiceProvider(system. IServiceProvider),
Questa opzione deve quindi essere configurata allo stesso modo per ogni utilizzo di quel fornitore di servizi.
Considera di non chiamare Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system. IServiceProvider)
EF quindi gestirà il fornitore di servizi e potrà creare nuove istanze secondo necessità
La configurazione completa è la seguente:
Le rappresentazioni sono le seguenti:
Naturalmente, le impostazioni sopra possono essere configurate anche sovrascrivendo il metodo OnConfiguring del DbContext (non raccomandato):
(Fine)
|