В процессе разработки мы хотим просматривать операторы SQL, выполняемые EF Core во время отладки. Вы можете использовать инструмент SQL Studio Manager Tools. Другой способ - использовать журналы, предоставляемые EF Core.
Действия по использованию журналов Entity Framework Core в ASP.NET Core:
1. Установите метод запуска
Удалите узел IIS в файле launchSettings.json, чтобы запустить программу как консольное приложение.
2. Настройте логи в Programm.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace CompanyApp
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
3. Журнал по умолчанию не отображает конфиденциальные данные, поэтому вы не можете видеть параметры выполнения оператора SQL. Если вы хотите увидеть параметры, вам нужно включить отображение конфиденциальных данных в методе ConfigureServices файла Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<CompanyDbContext>(options => {
//启用显示敏感数据
options.EnableSensitiveDataLogging(true);
options.UseSqlServer(Configuration.GetConnectionString("CompanyDbContext"));
});
}
4. Настройте параметры журнала appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore.Database.Command": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"CompanyDbContext": "Server=(localdb)\\mssqllocaldb;Database=CompanyDb;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}