看看Entity Framework 4生成的复杂的分页SQL语句
之前发现Entity Framework 4生成的COUNT查询语句问题,今天又发现它生成的分页SQL语句问题,而LINQ to SQL却不存在这个问题。
>>> 来看一看,瞧一瞧!
上代码:
看生成的SQL语句:
1. Entity Framework生成的SQL:
一个TOP,三个FROM。
2. LINQ to SQL生成的SQL:
无TOP,两个FROM。
两者的差距一目了然。
>>> 再来看一个:
将上面代码中Where的查询条件改为常量,即Where(coder => coder.Age > 20),见下图:
然后看看生成的SQL。
1. Entity Framework生成的SQL:
明显不一样吧(颜色),实际上只是少了个exec sp_executesql,但会带来性能影响(sp_executesql will use cached plan to get more performance, 这里谈到了这个问题)。
2. LINQ to SQL生成的SQL与之前的一样。
Entity Framework考虑了多数据库支持、存储过程支持,却忽视了这个地方。
从LINQ to SQL的DataContext到Entity Framework的ObjectContext,然后又发布ADO.NET Entity Framework Feature CTP5搞了个DbContext,DbContext也没有解决这个问题,感觉微软的思路有些乱。
目前看来,如果用Entity Framework 4,并在乎性能,只有两个选择:1. 不用LINQ to Entities,自己写SQL或存储过程;2. 自己写个Entity Framework ADO.NET provider for SQL Server 。
更新:从执行计划来看, Entity Framework生成的SQL似乎对性能没什么影响。
补充:
两个SQL的执行计划比较:
a) Entity Framework生成的SQL:
b) LINQ to SQL生成的SQL:
转载于:https://www.cnblogs.com/dudu/archive/2011/01/28/entity_framework_bad_sql.html
看看Entity Framework 4生成的复杂的分页SQL语句相关推荐
- Spring Boot 实体类 Entity的自动生成,利用Python实现 sql 语句快速转换成 Java 代码(一)
引言 最近,自己开始学习Java后端开发,作为小白,在导师的指导下,一步步开始学习,从如何搭建springboot项目开始,连接上 MySQL 数据库之后,再创建和编写Entity.Controlle ...
- Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令
在使用Entity Framework Core生成MySQL数据库脚本,对于生成的存储过程,在执行的过程中出现错误,需要在存储过程前面添加 delimiter // 附:可以使用Visual Stu ...
- entity framework框架生成摘要文档为空(没有元数据文档可用)的bug解决方案
简介 entity framework在vs中生成的.edmx文件,会导致摘要(说明)为空的bug,具体bug信息为"没有元数据文档可用.",导致我们表名打点去字段时,无法预知字段 ...
- Entity Framework Core 生成跟踪列
注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final).正式版发布时,功能可能存在变动. 当您设计数据库时,有时需要添加列以跟踪记录何时更改 ...
- Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题
在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp{[Key]public Guid No { get; set; }public int ...
- 生成截断所有表的sql语句
select CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') from INFORMATION_SCHEMA.TABLES whe ...
- oracle两个表合并 sql,如何创建从两个表(Oracle DBMS)生成“合并”数据集的Select SQL语句?...
我最后做了两个步骤:第一步填充事件表1中的数据,第二步合并目标(第一步中的数据集)和另一个源之间的数据.请原谅我,因为法律原因,我不得不混淆表名并省略下面代码中的一些列.下面是SQL: INSERT ...
- Entity Framework中IQueryable, IEnumerable, IList的区别
使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...
- Entity Framework中IQueryable, IEnumerable, IList的区别(转自网络)
使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...
最新文章
- python---websocket的使用
- java连接Orcale数据库并查询、插入、删除数据
- matlab用辛普森公式求积分_如何用Excel公式求最大值对应的行列序号
- 异常处理——zookeeper启动成功,但是zkfcunexpected error, closing socket connection and attempting reconnectjava
- python的序列化和反序列化
- testNG入门详解
- Jquery学习总结(1)——Jquery常用代码片段汇总
- 硬盘、服务器、RAID磁盘阵列
- Redis基础(十一)——缓存穿透和缓存雪崩
- SAO Utils 农历与股票插件
- python调用qq互联_实现QQ互联一键登录代码教程
- 【架构风格 架构模式 设计模式 概念】
- 联想小新Air2020ill版换硬盘及安装Win11详细过程
- 如何向外行讲解物联卡2G、3G和4G的区别
- (修订)来自山区双非本科少年的秋招冒险记
- 2022最新高通8155平台开源代码最新代码下载、编译方法
- WinINet 与 WinHTTP简介
- CentOS7防火墙设置;Linux防火墙设置;systemctl -- firewalld.service;firewall;firewall-cmd
- 视频教程-游戏网络编程必备知识-Unity3D
- PreTranslateMessage()