第4章 4.5 查看EF Core生成的SQL语句

ops/2025/3/1 1:16:19/

查看EF Core生成的SQL语句,就是在扒EF Core的底裤。是为了让开发者能够洞察SQL语句是否有性能缺陷或者是否和自己预期的一致。

4.5.1 使用简单日志查看SQL语句

这是视频教程里讲的一种:好像收费版的SQLServer才能用这个功能

还讲了一种:标准日志的方式

又讲了一种:

从5.0版本以后,可以通过简单日志的方式查看程序执行的SQL语句。具体方式就是在OnConfiguring方法中调用optionBuilder类的LogTo方法。

代码如下:

这样,在程序运行时就可以看到SQL语句了

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

 EF Core支持多种数据库的应用,但是由于各个数据库的语法特性存在差异,因此在不同的数据库环境下使用EF Core生成的SQL语句会存在一定差异。

例如书中提到的获取前三条数据的语法,下列三种数据库对应的语法都不相同:

下面实际操作对比一下

1. SQLServer

应用之前已创建好的数据库

在项目中查询年龄大于3且前三条数据

using (EFCoreDbContext dbCon = new EFCoreDbContext())
{var data = dbCon.Dogs.Where(d => d.Age > 3).Take(3);Thread.Sleep(3000);foreach (var item in data){Console.WriteLine(item.Name);}
}

控制台执行结果:

info: 2025/2/24 10:52:46.488 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)Executed DbCommand (33ms) [Parameters=[@__p_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']SELECT TOP(@__p_0) [t].[ID], [t].[Age], [t].[Name], [t].[Number]FROM [T_Dogs] AS [t]WHERE [t].[Age] > 3
旺旺
财旺
大黄

2. PostgreSQL

EF Core框架连PostgreSQL需要安装的NuGet包是:

Npgsql.EntityFrameworkCore.PostgreSQL

连接PGSQL的配置:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{string connStr = "Host=127.0.0.1;DataBase=EFStudy;Username=postgres;Password=123caonimaCAONIMA";//TrustServerCertificate=True User ID=sa;Password=123caonimaCAONIMA;optionsBuilder.UseNpgsql(connStr);optionsBuilder.LogTo(sqlLog => {if(!sqlLog.Contains("CommandExecuted")){return;}Console.WriteLine(sqlLog); });
}

框架搭建详细过程就不再赘述了,直接上查询代码:

using (EFCoreDbContext dbCon = new EFCoreDbContext())
{var data = dbCon.Dogs.Where(d => d.Age > 3).Take(3);Thread.Sleep(3000);foreach (var item in data){Console.WriteLine(item.Name);}
}

控制台执行结果:

info: 2025/2/24 14:22:04.450 RelationalEventId.CommandExecuted[20101] (Microsoft.EntityFrameworkCore.Database.Command)Executed DbCommand (46ms) [Parameters=[@__p_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']SELECT t."ID", t."Age", t."Name", t."Number"FROM "T_Dogs" AS tWHERE t."Age" > 3LIMIT @__p_0
旺旺
财旺
大黄

由两种数据库操作的执行过程来看,同样的业务逻辑的代码,在面对不同种类的数据库的情况下,生成的SQL语句存在差异。


http://www.ppmy.cn/ops/162099.html

相关文章

Moe(混合专家)架构和Dense架构对比?

MoE 架构和 Dense 架构有以下一些对比: 结构设计 MoE 架构:将模型拆分为多个 “专家” 网络,由门控网络根据输入特征选择 Top-K 个相关专家进行计算,实现 “稀疏计算”。Dense 架构:采用传统 Transformer 架构&#…

和鲸科技推出人工智能通识课程解决方案,助力AI人才培养

2025年2月,教育部副部长吴岩应港澳特区政府邀请,率团赴港澳宣讲《教育强国建设规划纲要 (2024—2035 年)》。在港澳期间,吴岩阐释了教育强国目标的任务,并与特区政府官员交流推进人工智能人才培养的办法。这一系列行动体现出人工智…

Nginx 报错:413 Request Entity Too Large

做web开发时,对于上传附件的功能,如果nginx没有调整配置,上传大一点的文件就会发生下面这种错误: 要解决上面的问题,只需要调整Nginx配置文件中的 client_max_body_size 参数即可,这个配置参数一般在http配…

ui设计公司兰亭妙微分享:科研单位UI界面设计

科研单位的UI界面设计是一项至关重要的任务,它不仅关乎科研工作的效率,还直接影响到科研人员的用户体验。以下是对科研单位UI界面设计的详细分析: 一、设计目标 科研单位的UI界面设计旨在提升科研工作的效率与便捷性,同时确保科…

UE5销毁Actor,移动Actor,简单的空气墙的制作

1.销毁Actor 1.Actor中存在Destory()函数和Destoryed()函数 Destory()函数是成员函数,它会立即标记 Actor 为销毁状态,并且会从场景中移除该 Actor。它会触发生命周期中的销毁过程,调用 Destroy() 后,Actor 立即进入销毁过程。具体…

【大模型】大模型推理能力深度剖析:从通用模型到专业优化

大模型推理能力深度剖析:从通用模型到专业优化 大模型推理能力深度剖析:从通用模型到专业优化一、通用语言模型与推理模型的区别(一)通用语言模型:多任务的“万金油”(二)推理模型:复…

MySQL常用命令大全(可复制使用)

MySQL常用命令大全(可复制使用) 基础命令 操作命令连接MySQL相关数据库mysql -u root(用户名) -p;查看所有数据库show databases;选择一个数据库use 数据库名;查看所有表show tables;查看表结构describe 表名;或 show columns from 表名;创…

第12章_管理令牌和会话

管理令牌和会话 除了充当集中式身份验证和授权服务外,Keycloak 的核心还是一个会话和令牌管理系统。 作为身份验证过程的一部分,Keycloak 可以创建服务器端会话并将它们与令牌相关联。通过依赖这些会话,Keycloak 能够保持会话发起的身份验证…