В разработке, при использовании основного фреймворка ef, при использовании linq или lambda-выражений мы не можем напрямую просматривать sql-операторы, что неудобно для устранения неполадок или оптимизации производительности.
В этой статье приводится EF Core 5 в качестве примерачтобы просмотреть SQL-операторы, генерируемые выходным EF.
Сначала создайте новую заводскую переменную consolelogger в файле запуска с переменной «ConsoleLoggerFactory», и сгенерированный sql-оператор будет выведен в консоль, код выглядит следующим образом:
Добавьте вывод журнала в метод ConfigureServices, настроив код DbContext следующим образом:
Запустите проект и увидите результат консоли следующим образом:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Выполнено DbCommand (1 мс) [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 (19 мс) [параметры=[p0='?' (Размер = 4000)], CommandType='Text', CommandTimeout='30'] ВЫБРАТЬ * ИЗ области ГДЕ пинИнь = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Выполнено DbCommand (1 мс) [Parameters=[], CommandType='Text', CommandTimeout='30'] ВЫБРАТЬ * ИЗ ЗОНЫ
Если SQL-оператор с условием where может видеть только параметризованные переменные, а не конкретные передаваемые значения, добавляется следующая конфигурация:
Разрешите включение данных приложений в сообщения об исключениях, логах и других источниках.
Это может включать значения, присвоенные свойствам экземпляра сущности,
значения параметров команд, отправляемых в базу данных, и другие подобные данные.
Этот флаг должен быть включен только при наличии мер безопасности
Исходя из чувствительности этих данных.
Обратите внимание, проходит ли заявка
Вызовите генератор Microsoft.EntityFrameworkCore.DbContextOptions.UseInternalServiceProvider(system. IServiceProvider),
Эта опция должна быть настроена одинаково для всего использования этого провайдера.
Рассмотрите возможность не вызывать Microsoft.EntityFrameworkCore.DbContextOptionsGenerator.UseInternalServiceProvider(system. IServiceProvider)
Таким образом, EF будет управлять поставщиком услуг и может создавать новые экземпляры по мере необходимости
Полная схема выглядит следующим образом:
Визуализации следующие:
Конечно, вышеуказанные настройки можно настроить, переопределив метод OnConfiguring в DbContext (не рекомендуется):
(Конец)
|