I udvikling, når vi bruger ef core-frameworket, og når vi bruger linq- eller lambda-udtryk, kan vi ikke se SQL-udsagnene direkte, hvilket er besværligt for os at fejlfinde eller optimere ydeevnen.
Denne artikel bruger EF Core 5 som eksempelfor at se SQL-udsagnene genereret af output-EF.
Først opretter du en ny consolelogger factory-variabel i opstartsfilen med variablen "ConsoleLoggerFactory", og den genererede SQL-sætning vil blive eksporteret til konsollen, koden er som følger:
Tilføj logoutput til ConfigureServices-metoden ved at konfigurere DbContext-koden som følger:
Start projektet og se konsollens output som følger:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Udført DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VÆLG [a]. [Id], [a]. [Deaktiveret], [a]. [Link], [a]. [Navn], [a]. [PinYin], [a]. [Position], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] FRA [Område] SOM [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Udførte DbCommand (19ms) [Parametre=[p0='?' (Størrelse = 4000)], CommandType='Text', CommandTimeout='30'] VÆLG * FRA Område HVOR pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Udført DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VÆLG * FRA Område
Hvis SQL-sætningen med where-betingelsen kun kan vise de parameteriserede variabler, ikke de specifikke værdier, der er sendt, tilføjes følgende konfiguration:
Gør det muligt for applikationsdata at blive inkluderet i undtagelsesmeddelelser, logfiler og mere.
Dette kan inkludere værdier tildelt entitetsinstansens egenskaber,
parameterværdier for kommandoer sendt til databasen og andre sådanne data.
Dette flag bør kun aktiveres, hvis der er sikkerhedsforanstaltninger på plads
Baseret på følsomheden af disse data.
Bemærk, om ansøgningen går igennem
Kald Microsoft.EntityFrameworkCore.DbContextOptions generator.UseInternalServiceProvider(system. IServiceProvider),
Denne mulighed skal derefter konfigureres på samme måde for al brug af den pågældende tjenesteudbyder.
Overvej ikke at kalde Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system. IServiceProvider)
EF vil derfor styre tjenesteudbyderen og kan oprette nye instanser efter behov
Det fulde setup er som følger:
Renderingerne er som følger:
Selvfølgelig kan ovenstående indstillinger også konfigureres ved at overskrive OnConfiging-metoden i DbContext (ikke anbefalet):
(Slut)
|