查看EF Core生成的SQL语句

我们知道,程序都是要通过SQL语句与关系数据库进行交互的。

在使用EF Core的时候,一般不需要再去编写SQL语句,这是因为EF Core会把C#代码转换成与SQL语句相关的操作。

在日常开发中,只要编写C#代码对实体类进行操作就可以了,不需要时刻关注代码生成的SQL语句是什么样的。

但是开发人员仍然有查看底层SQL语句的需求。

比如在程序出现性能问题的时候,开发人员需要检查EF Core生成的SQL语句是否有性能缺陷;

比如在程序出现Bug的时候,开发人员需要检查EF Core生成的SQL语句是否和自己预期的一致。

1. 使用简单日志查看SQL语句

在EF Core5.0之前,我们需要使用标准的日志框架输出EF Core背后执行的SQL语句。

而从EF Core 5.0 开始,EF Core增加了一种”简单日志”,在不引入.NET的日志框架的情况下,我们就能得到程序执行的SQL语句。

我们只要在上下文的OnConfiguring方法中调用optionsBuilder类的LogTo方法,传递一个参数为String的委托即可。

当相关日志输出的时候,对应的委托就会被执行。

C#
 optionsBuilder.LogTo(Console.WriteLine);

这样我们就可以把包含底层执行的SQL语句在内的EF Core的日志输出到控制台

输出结果:

2. 探秘EF Core生成SQL语句的不同

我们知道,EF Core会把C#语句翻译成SQL语句。

不同数据库的语法以及支持的函数是有一些差别的,比如SQL Sever中获取前3条数据的语法是TOP,而MySQL中则是LIMIT,Oracle中则是ROWNUM。

同样的C#语句会被EF Core翻译成不同数据库中的不同SQL语句,这样EF Core把底层数据库方言的差异性屏蔽起来,开发人员只要专注编写C#代码即可。

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部