之前发现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语句相关推荐

  1. Spring Boot 实体类 Entity的自动生成,利用Python实现 sql 语句快速转换成 Java 代码(一)

    引言 最近,自己开始学习Java后端开发,作为小白,在导师的指导下,一步步开始学习,从如何搭建springboot项目开始,连接上 MySQL 数据库之后,再创建和编写Entity.Controlle ...

  2. Entity Framework Core生成的存储过程在MySQL中需要进行处理及PMC中的常用命令

    在使用Entity Framework Core生成MySQL数据库脚本,对于生成的存储过程,在执行的过程中出现错误,需要在存储过程前面添加 delimiter // 附:可以使用Visual Stu ...

  3. entity framework框架生成摘要文档为空(没有元数据文档可用)的bug解决方案

    简介 entity framework在vs中生成的.edmx文件,会导致摘要(说明)为空的bug,具体bug信息为"没有元数据文档可用.",导致我们表名打点去字段时,无法预知字段 ...

  4. Entity Framework Core 生成跟踪列

    注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final).正式版发布时,功能可能存在变动. 当您设计数据库时,有时需要添加列以跟踪记录何时更改 ...

  5. Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题

    在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下: public class Emp{[Key]public Guid No { get; set; }public int ...

  6. 生成截断所有表的sql语句

    select CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') from INFORMATION_SCHEMA.TABLES whe ...

  7. oracle两个表合并 sql,如何创建从两个表(Oracle DBMS)生成“合并”数据集的Select SQL语句?...

    我最后做了两个步骤:第一步填充事件表1中的数据,第二步合并目标(第一步中的数据集)和另一个源之间的数据.请原谅我,因为法律原因,我不得不混淆表名并省略下面代码中的一些列.下面是SQL: INSERT ...

  8. Entity Framework中IQueryable, IEnumerable, IList的区别

    使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...

  9. Entity Framework中IQueryable, IEnumerable, IList的区别(转自网络)

    使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...

最新文章

  1. python---websocket的使用
  2. java连接Orcale数据库并查询、插入、删除数据
  3. matlab用辛普森公式求积分_如何用Excel公式求最大值对应的行列序号
  4. 异常处理——zookeeper启动成功,但是zkfcunexpected error, closing socket connection and attempting reconnectjava
  5. python的序列化和反序列化
  6. testNG入门详解
  7. Jquery学习总结(1)——Jquery常用代码片段汇总
  8. 硬盘、服务器、RAID磁盘阵列
  9. Redis基础(十一)——缓存穿透和缓存雪崩
  10. SAO Utils 农历与股票插件
  11. python调用qq互联_实现QQ互联一键登录代码教程
  12. 【架构风格 架构模式 设计模式 概念】
  13. 联想小新Air2020ill版换硬盘及安装Win11详细过程
  14. 如何向外行讲解物联卡2G、3G和4G的区别
  15. (修订)来自山区双非本科少年的秋招冒险记
  16. 2022最新高通8155平台开源代码最新代码下载、编译方法
  17. WinINet 与 WinHTTP简介
  18. CentOS7防火墙设置;Linux防火墙设置;systemctl -- firewalld.service;firewall;firewall-cmd
  19. 视频教程-游戏网络编程必备知识-Unity3D
  20. PreTranslateMessage()

热门文章

  1. 《Linux内核原理与分析》第二周作业
  2. ActiveMQ5.14.5配置参数详解
  3. php redis 安装和使用
  4. 经典的Java基础面试题集锦
  5. SDN要防止七种认识偏差
  6. 更换主版之后远程管理卡恢复操作
  7. 用基于模型和接口的T4来生成RESTful服务
  8. double和float计算精度不准的问题
  9. 音频(3):iPod Library Access Programming Guide:Introduction
  10. 谁能搞定中国的文艺复兴,我就能搞定中国的政治改革