实体框架核心3.1 DbCommandInterceptor仅记录SELECT查询

时间:2020-10-16 16:12:20

标签: entity-framework .net-core dbcommand

我已经实现了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。

如果我不小心设置了一些标志或过滤器?

1 个答案:

答案 0 :(得分:0)

我设法通过这篇文章找到解决方案:https://christianfindlay.com/2020/07/19/sql-generated-by-entity-framework-core/

该解决方案不使用Interger,而是使用LoggerFactory和自定义ILogger实现,该实现提取有关所生成SQL的关键信息。

由此,我可以写出SQL,参数并查看执行查询所花费的时间。