I utvikling, når vi bruker ef core-rammeverket, og når vi bruker linq- eller lambda-uttrykk, kan vi ikke se SQL-setningene direkte, noe som er upraktisk for oss å feilsøke eller optimalisere ytelsen.
Denne artikkelen bruker EF Core 5 som eksempelfor å se SQL-setningene generert av utdataene EF.
Først oppretter du en ny consolelogger factory-variabel i oppstartsfilen med variabelen "ConsoleLoggerFactory", og den genererte sql-setningen vil bli eksportert til konsollen, koden er som følger:
Legg til loggutgang i ConfigureServices-metoden ved å konfigurere DbContext-koden som følger:
Start prosjektet og se konsollens utgang som følger:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Utført DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VELG [a]. [Id], [a]. [Funksjonshemmet], [a]. [Link], [a]. [Navn], [a]. [PinYin], [a]. [Posisjon], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] FRA [Område] SOM [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Utført DbCommand (19ms) [Parametere=[p0='?' (Størrelse = 4000)], CommandType='Text', CommandTimeout='30'] VELG * FRA Område HVOR pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Utført DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VELG * FRA Område
Hvis SQL-setningen med where-betingelsen kun kan se de parameteriserte variablene, ikke de spesifikke verdiene som er sendt, legges følgende konfigurasjon til:
Gjør det mulig å inkludere applikasjonsdata i unntaksmeldinger, logger og mer.
Dette kan inkludere verdier tildelt enhetens instansegenskaper,
parameterverdier for kommandoer sendt til databasen, og andre slike data.
Dette flagget bør kun aktiveres dersom det finnes sikkerhetstiltak på plass
Basert på sensitiviteten til disse dataene.
Merk om søknaden går gjennom
Kall Microsoft.EntityFrameworkCore.DbContextOptions generator.UseInternalServiceProvider(system. IServiceProvider),
Dette alternativet må deretter konfigureres på samme måte for all bruk av den tjenesteleverandøren.
Vurder å ikke kalle Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system. IServiceProvider)
EF vil derfor administrere tjenesteleverandøren og kan opprette nye instanser etter behov
Hele oppsettet er som følger:
Gjengivelsene er som følger:
Selvfølgelig kan de ovennevnte innstillingene også konfigureres ved å overskrive OnConfiging-metoden i DbContext (ikke anbefalt):
(Slutt)
|