如何在EF Core中显示底层SQL查询?

129

在这个.NET Core 2.0发布!视频的倒数3:15,Diego Vega演示了Entity Framework Core 2.0中的新功能。其中一部分是在控制台应用程序中显示底层SQL的数据转储。

输入图像描述文字

我看到Stack Overflow上有很多答案建议使用SQL Profiler来查看底层查询。但现在我很好奇:你怎么能做到Diego Vega所做的事情,并在应用程序中直接显示查询呢?

针对.NET 6+的更新:在开发中,默认启用了EF日志记录。请参阅此GitHub问题

更新:Diego将"Microsoft.EntityFrameworkCore.Database.Command":"Information"添加到appsettings.Development.json。有关详细信息,请参见如何在EF Core中显示底层SQL查询?


2
显然他正在使用EF Core Logging,很可能是使用过滤器if (eventId.Id == Microsoft.EntityFrameworkCore.Diagnostics.RelationalEventId.CommandExecuted.Id) - Ivan Stoev
4
只需在 appsettings.Development.json 中添加 "Microsoft.EntityFrameworkCore.Database.Command": "Information" 即可。 - RickAndMSFT
12个回答

1
如果您正在使用Serilog:

Program.cs

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseSerilog()
        .MinimumLevel.Override("Microsoft.EntityFrameworkCore", Serilog.Events.LogEventLevel.Information)
            .WriteTo.Console(restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Verbose))

1
许多答案在这里都很有效,但如果你正在使用NLog,就不是这样了。
如果像我一样使用NLog,只需执行以下操作:
optionsBuilder.UseLoggerFactory(new NLogLoggerFactory());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接