.NET Core 3.0 ConsoleLoggerFactory для SQLite - PullRequest
1 голос
/ 06 мая 2019

с использованием последних версий .Net Core (предварительный просмотр 3.0) и EF Core (предварительный просмотр 3.0), просматривая несколько онлайн-источников, я сделал это:

Program.cs

public class MainWorker : IHostedService {

  public static readonly ILoggerFactory ConsoleLoggerFactory =
     LoggerFactory.Create(builder => builder.AddConsole();

MyDbContext.cs

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
  string connectionString = ...
    optionsBuilder
      .UseLoggerFactory(MainWorker.ConsoleLoggerFactory)
      .EnableSensitiveDataLogging(true)
      .UseSqlite(connectionString);
    }

Это все строит и работает нормально, но при использовании EF для запросов к моей БД вместо реальных запросов SQL, которые я только видит, такие записи, как:

info: Microsoft.EntityFrameworkCore.Infrastructure [10403] Entity Framework Core 3.0.0-preview4.19176.6 инициализировал «MyDbContext» с использованием провайдера «Microsoft.EntityFrameworkCore.Sqlite» с параметрами: SensitiveDataLoggingEnabled

Как я могу получить фактический запрос SQL для IQueryable?

Любая помощь?

1 Ответ

4 голосов
/ 06 мая 2019

Обновление: На основании предоставленной обратной связи, нижеприведенное изменение было отменено в 3.0 превью 7 .


Это одно из ожидаемых критических изменений в EF Core 3.0 - Выполнение запроса регистрируется на уровне отладки .

Ссылка объясняет, почему это так и как вернуть предыдущее поведение ведения журнала SQL на уровне Info (по умолчанию) с использованием DbContextOptionsBuilder:

.ConfigureWarnings(c => c.Log((RelationalEventId.CommandExecuting, LogLevel.Info))); 

Другой способ - изменить минимальный уровень журнала для категории DbLoggerCategory.Database.Command на Debug, используя метод AddFilter из ILoggingBuilder:

.AddFilter(DbLoggerCategory.Database.Command.Name, LogLevel.Debug)
...