У розробці, при використанні основного фреймворку ef, при використанні linq або lambda-виразів, ми не можемо безпосередньо переглядати sql-оператори, що незручно для усунення несправностей або оптимізації продуктивності.
У цій статті використано EF Core 5 як прикладщоб переглянути SQL-оператори, згенеровані вихідним EF.
Спочатку створіть нову factory-змінну 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 (19ms) [параметри=[p0='?' (Розмір = 4000)], CommandType='Текст', CommandTimeout='30'] ВИБРАТИ * З Області, де pinYin = @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 (не рекомендується):
(Кінець)
|