我已经实现了DbCommandInterceptor,以便可以记录EF生成的查询。
我已在OnConfiguring方法中将拦截器添加到我的EF上下文中,如下所示
optionsBuilder
.UseSqlServer(dbConnectionString)
.AddInterceptors(new DBContextInterceptorLogging(logger));
拦截器的工作量很大,我可以看到生成的任何SELECT sql查询。但是,我看不到正在记录任何UPDATE,INSERT或DELETE查询。
我的DBContextInterceptorLogging类正在重写的ScalarExecuting,NonQueryExecuting,ReaderExecuting,NonQueryExecutingAsync方法中以及在ScalarExecuted,NonQueryExecuted,ReaderExecuted,NonQueryExecutedAsync方法中启动StopWatch,并停止StopWatch,并将DbCommand.CommandText写入ILogger < >。
我还重写了CommandCreated,CommandFailed和CommandFailedAsync方法。
但是,我在记录器输出中再也看不到SQL INSERT / UPDATE / DELETE。
如果我不小心设置了一些标志或过滤器?
答案 0 :(得分:0)
我设法通过这篇文章找到解决方案:https://christianfindlay.com/2020/07/19/sql-generated-by-entity-framework-core/
该解决方案不使用Interger,而是使用LoggerFactory和自定义ILogger实现,该实现提取有关所生成SQL的关键信息。
由此,我可以写出SQL,参数并查看执行查询所花费的时间。