0

我已经实现了一个 DbCommandInterceptor,以便我可以记录 EF 生成的查询。

我已在 OnConfiguring 方法中将拦截器添加到我的 EF 上下文中,如下所示

    optionsBuilder
        .UseSqlServer(dbConnectionString)
        .AddInterceptors(new DBContextInterceptorLogging(logger));

拦截器工作,我可以看到任何生成的 SELECT sql 查询。但是,我没有看到任何 UPDATE、INSERT 或 DELETE 查询被记录。

我的 DBContextInterceptorLogging 类在重写的 ScalarExecuting、NonQueryExecuting、ReaderExecuting、NonQueryExecutingAsync 方法中启动 StopWatch,在 ScalarExecuted、NonQueryExecuted、ReaderExecuted、NonQueryExecutedAsync 方法中停止 StopWatch,并将 DbCommand.CommandText 写入 ILogger<>。

我还覆盖了 CommandCreated、CommandFailed 和 CommandFailedAsync 方法。

但是,我从未在记录器输出中看到 SQL INSERT/UPDATE/DELETE。

如果我无意中设置了一些标志或过滤器?

4

1 回答 1

0

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

该解决方案不是添加拦截器,而是使用 LoggerFactory,并使用自定义 ILogger 实现来提取有关生成的 SQL 的关键信息。

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

于 2020-10-16T16:44:51.790 回答