架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23967|回复: 2

[资料] EF Core 系列(四)查看生成的 SQL 语句

[复制链接]
发表于 2021-2-19 13:36:34 | 显示全部楼层 |阅读模式
EF Core 系列(二)封装 OnModelCreating 利用反射创建索引等
https://www.itsvse.com/thread-9392-1-1.html

EF Core 系列(三)实体框架影子属性[转载]
https://www.itsvse.com/thread-9558-1-1.html


在开发中,使用 ef core 框架,在使用 linq 或则 Lambda 表达式的时候,无法直接查看 sql 语句,不方便我们排查或者优化性能,如何查看 ef core 生成的 sql 语句呢?

本文以 ef core 5 为例,查看输出 ef 生成的 sql 语句。


首先,在 startup 文件新建一个 consolelogger 工厂变量为“ConsoleLoggerFactory”,生成的 sql 语句将输出到控制台,代码如下:

在 ConfigureServices 方法配置 DbContext 添加日志输出,代码如下:

启动项目,查看控制台输出,如下:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT [a].[Id], [a].[Disabled], [a].[Link], [a].[Name], [a].[PinYin], [a].[Position], [a].[_CreateTime], [a].[_CreateTimeStamp], [a].[_UpdateTime], [a].[_UpdateTimeStamp]
      FROM [Area] AS [a]
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (19ms) [Parameters=[p0='?' (Size = 4000)], CommandType='Text', CommandTimeout='30']
      SELECT * FROM Area WHERE pinYin = @p0
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT * FROM Area
QQ截图20210219132040.jpg

如果带有 where 条件的 sql 语句,只能查看参数化的变量,无法查看具体传入的值,增加如下配置:

使应用程序数据能够包含在异常消息、日志等中。

这可以包括分配给实体实例属性的值,

发送到数据库的命令的参数值,以及其他此类数据。

只有在有适当的安全措施时才应启用此标志

基于这些数据的敏感性。

请注意,如果应用程序正在通过

打电话给Microsoft.EntityFrameworkCore.DbContextOptions生成器.UseInternalServiceProvider(系统.IServiceProvider),

然后,对于该服务提供者的所有使用,必须以相同的方式配置此选项。

考虑不打电话Microsoft.EntityFrameworkCore.DbContextOptions生成器.UseInternalServiceProvider(系统.IServiceProvider)

因此EF将管理服务提供者,并可以根据需要创建新实例


完整设置如下:

效果图如下:

QQ截图20210219133355.jpg

当然,以上设置也可以通过重写 DbContext 的 OnConfiguring 方法进行配置(不推荐):

(完)




上一篇:金融 TipRanks 股票分析评级
下一篇:EF Core 系列(五)执行 SQL 语句或者视图、存储过程
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2021-9-26 09:21:07 | 显示全部楼层
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-10-26 09:46:19 | 显示全部楼层
学习,看看怎么时限的
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-19 15:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表