.NET Core 8发布版Entity Framework Core自动记录SQL查询至事件日志原因排查
问题
我发布了一个使用Entity Framework Core访问SQL Server数据库的.NET Core 8 Web应用,应用运行正常,但在事件日志中发现大量Entity Framework Core执行的查询信息条目。注册DbContext时的代码如下:
services.AddDbContext<SecuWebModulesVisitorControlContext>(options => { options.UseSqlServer(configuration.GetConnectionString("Modules.VisitorControl"), o => o.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)); #if DEBUG options.LogTo(x => Debug.WriteLine(x)); #endif });
发布编译时,上述LogTo方法不会被调用,请问这是什么原因?
解答
- DEBUG条件编译的限制:你写的
LogTo调用被#if DEBUG和#endif这对条件编译指令包裹了。只有当项目以DEBUG模式编译时,这段代码才会被包含到最终程序里;而发布编译默认使用的是RELEASE模式,编译器会直接跳过这段代码,所以LogTo自然不会被调用。 - 事件日志中查询日志的来源:事件日志里的EF Core查询日志和你这段
LogTo代码无关。这是因为EF Core默认的日志配置已经开启了查询相关的日志记录,并且日志输出目标包含了事件日志,所以即使你没在RELEASE模式下配置LogTo,这些日志依然会被输出。
内容的提问来源于stack exchange,提问作者jstuardo
相关产品推荐
相关产品推荐

