I utveckling, när vi använder ef core-ramverket, när vi använder linq- eller lambda-uttryck, kan vi inte direkt se SQL-satserna, vilket är besvärligt för oss att felsöka eller optimera prestandan.
Den här artikeln använder EF Core 5 som exempelför att visa SQL-satserna som genereras av utdata EF.
Skapa först en ny consolelogger factory-variabel i startfilen med variabeln "ConsoleLoggerFactory", och den genererade sql-satsen kommer att matas ut till konsolen, koden är följande:
Lägg till loggutdata till ConfigureServices-metoden genom att konfigurera DbContext-koden enligt följande:
Starta projektet och se konsolens utdata enligt följande:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Utförd DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VÄLJ [a]. [Id], [a]. [Inaktiverad], [a]. [Link], [a]. [Namn], [a]. [PinYin], [a]. [Position], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] FRÅN [Område] SOM [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Utfört DbCommand (19ms) [Parametrar=[p0='?' (Storlek = 4000)], CommandType='Text', CommandTimeout='30'] VÄLJ * FRÅN Område DÄR pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Utförd DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] VÄLJ * FRÅN Område
Om SQL-satsen med where-villkoret endast kan visa de parameteriserade variablerna, inte de specifika värden som skickats, läggs följande konfiguration till:
Möjliggör att applikationsdata inkluderas i undantagsmeddelanden, loggar och mer.
Detta kan inkludera värden tilldelade entitetsinstansegenskaper,
parametervärden för kommandon som skickas till databasen, samt annan sådan data.
Denna flagga bör endast aktiveras om säkerhetsåtgärder finns på plats
Baserat på känsligheten i dessa data.
Observera om ansökan går igenom
Anropa Microsoft.EntityFrameworkCore.DbContextOptions generator.UseInternalServiceProvider(system. IServiceProvider),
Detta alternativ måste sedan konfigureras på samma sätt för all användning av den tjänsteleverantören.
Överväg att inte anropa Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system. IServiceProvider)
EF kommer därför att hantera tjänsteleverantören och kan skapa nya instanser vid behov
Hela uppställningen är följande:
Renderingarna är följande:
Självklart kan ovanstående inställningar också konfigureras genom att åsidosätta OnConfiguring-metoden i DbContext (inte rekommenderad):
(Slut)
|