В разработката, при използване на ef core framework, при използване на linq или lambda изрази, не можем директно да видим SQL операторите, което ни е неудобно за отстраняване на проблеми или оптимизиране на производителността.
Тази статия използва EF Core 5 като примерза да се видят SQL операторите, генерирани от изходния EF.
Първо, създайте нова фабрична променлива на consolelogger във файла при стартиране с променливата "ConsoleLoggerFactory", и генерираното sql твърдение ще бъде изведено към конзолата, кодът е следният:
Добавете лог изход към метода ConfigureServices, като конфигурирате кода на DbContext по следния начин:
Започнете проекта и вижте конзолния изход както следва:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Изпълнен DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] ИЗБЕРЕТЕ [a]. [Id], [a]. [С увреждания], [a]. [Линк], [a]. [Име], [a]. [Пинин], [a]. [Позиция], [a]. [_CreateTime], [a]. [_CreateTimeStamp], [a]. [_UpdateTime], [a]. [_UpdateTimeStamp] ОТ [Район] AS [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Изпълнен DbCommand (19ms) [параметри=[p0='?' (Размер = 4000)], CommandType='Текст', CommandTimeout='30'] ИЗБЕРИ * ОТ Област, където пинИн = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Изпълнен DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] ИЗБЕРЕТЕ * ОТ ЗОНА
Ако SQL операторът с условието where може да вижда само параметризираните променливи, а не конкретните предавани стойности, се добавя следната конфигурация:
Позволете да се включват данни за приложения в съобщения за изключения, логове и други.
Това може да включва стойности, присвоени на свойствата на екземпляра на обекта,
стойности на параметрите на командите, изпращани към базата данни, и други подобни данни.
Този флаг трябва да бъде активиран само ако има мерки за безопасност
Въз основа на чувствителността на тези данни.
Обърнете внимание дали кандидатурата се разглежда
Извикайте генератора Microsoft.EntityFrameworkCore.DbContextOptions.UseInternalServiceProvider(system. IServiceProvider),
Тази опция трябва да бъде конфигурирана по същия начин за всички ползи от този доставчик.
Обмислете да не извиквате Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system. IServiceProvider)
Следователно EF управлява доставчика на услугата и може да създава нови инстанции при нужда
Пълната конфигурация е следната:
Визуализациите са както следва:
Разбира се, горните настройки могат да се конфигурират и чрез презаписване на метода OnConfiguring на DbContext (не се препоръчва):
(Край)
|