W procesie rozwoju, korzystając z frameworka EF Core, przy użyciu wyrażeń linq lub lambda, nie możemy bezpośrednio przeglądać instrukcji sql, co jest dla nas niewygodne przy diagnozowaniu problemów czy optymalizacji wydajności.
W tym artykule jako przykładzie używa EF Core 5aby zobaczyć instrukcje SQL generowane przez wyjście EF.
Najpierw stwórz nową zmienną fabryczną consolelogger w pliku startowym z zmienną "ConsoleLoggerFactory", a wygenerowane polecenie sql zostanie wydrukowane do konsoli, a kod wygląda następująco:
Dodaj wynik logu do metody ConfigureServices, konfigurując kod DbContext w następujący sposób:
Rozpocznij projekt i zobacz wyjście z konsoli w następujący sposób:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Wykonano DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] WYBIERZ [a]. [Id], [a]. [Niepełnosprawny], [a]. [Link], [a]. [Imię], [a]. [PinYin], [a]. [Pozycja], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] Z [Obszar] AS [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Wykonano polecenie DbCommand (19ms) [Parametry=[p0='?' (Rozmiar = 4000)], CommandType='Text', CommandTimeout='30'] WYBIERZ * Z Obszaru, GDZIE pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Wykonano DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] WYBIERZ * Z Obszaru
Jeśli instrukcja SQL z warunkem gdzie może wyświetlać tylko parametryzowane zmienne, a nie przekazywane wartości konkretne, dodaje się następującą konfigurację:
Umożliwić uwzględnienie danych aplikacji w komunikatach wyjątków, logach i innych miejscach.
Może to obejmować wartości przypisane do właściwości instancji encji,
wartości parametrów poleceń wysyłanych do bazy danych oraz innych takich danych.
Flaga ta powinna być aktywowana tylko wtedy, gdy istnieją środki bezpieczeństwa
Na podstawie wrażliwości tych danych.
Zwróć uwagę, czy wniosek jest w trakcie
Zadzwoń do generatora Microsoft.EntityFrameworkCore.DbContextOptions.UseInternalServiceProvider(system. IServiceProvider),
Ta opcja musi być następnie skonfigurowana w ten sam sposób dla wszystkich zastosowań tego dostawcy.
Rozważ niedzwonienie do Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system. IServiceProvider)
EF zarządza więc dostawcą usług i może tworzyć nowe instancje w razie potrzeby
Pełny zestaw jest następujący:
Przedstawienia przedstawiają się następująco:
Oczywiście powyższe ustawienia można również skonfigurować przez nadpisanie metody OnConfiguring w DbContext (niezalecane):
(Koniec)
|