一起谈.NET技术,看看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:

时间: 2024-09-30 15:14:40

一起谈.NET技术,看看Entity Framework 4生成的复杂的分页SQL语句的相关文章

看看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(cod

看看Entity Framework 4生成的复杂的分页SQL语“.NET研究”句

之前发现Ent上海网站建设ity Framework 4生成的COUNT查询语句问题,今天又发现它生成的分页SQL语句问题,而LINQ to SQL却不存在这个问题. >>> 来看一看,瞧一瞧! 上代码: 看生成的SQL语句: 1. Entity Framework生成的SQL: 一个TOP,三个FROM. 上海闵行企业网站设计与制作 2. LINQ to SQL生成的SQL: 无TOP,两个FROM. 两者的差距一目了然. >>> 再来看一个: 将上面代码中Where

一起谈.NET技术,Entity Framework 缓存处理与日志监控

在Kooboo中使用了Entity Framework作为持久化框架,但由于EF1.0并没有提供完整缓存解决方案,一直以来都在为数据缓存而烦脑,在没有找到合适解决方案的情况下,采取了临时的解决办法:直接缓存实体.但是由于Entity实体都是带状态的,并且都与ObjectContext有间接的反向引用,缓存带状态的实体,会造成对象上下文混乱和连接资源的无法被正确释放.因此缓存的Entity实体,首先必须被分离或者重新定义POCO实体来代替Entity实体作为缓存对象.这样一来,所有的缓存实体的关联

一起谈.NET技术,Entity Framework 4.1 推荐英文教程

Entity Framework 4.1 相关文档实在少得可怜,在网上找到一个不错的系列文章,与大家分享一下. 作者:Vincent-Philippe Lauzon 感谢冠军的翻译! · Entity Framework 4.1: Basics (1) [译文]Entity Framework 4.1 之一 : 基础 · Entity Framework 4.1: Override conventions (2) [译文]Entity Framework 4.1 之二 : 覆盖默认的约定 · E

一起谈.NET技术,Entity Framework 4.1 Code First 学习之路(二)

写系列的上一篇已经是很久之前的事儿了= =在此期间,EF 4.1的RTW都已经出来了,NH 3.2的Alpha已经2了...其实不是我懒,工作中也在一直使用EF 4.1.主要是上次承诺过的一个Update功能搞不定= = 总之这一次的目标是: 实现一个完整的IRepository(添加增删改能力) 领域对象的继承 事物 首先来看IRepository 我的接口如下: public interface IRepository<TEntity>where TEntity : IEntity{ IE

Entity Framework 自动生成CodeFirst代码

原文:Entity Framework 自动生成CodeFirst代码 前言 在前面的文章中我们提到Entity Framework的"Code First"模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power Tools如何基于现有数据库生成数据类和数据库上下等. Entity Framework Power Tools 基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entit

一起谈.NET技术,.Net Framework Client Profile 和 .Net Framework

.NET Framework Client Profile是.NET Framework的裁剪版本.它面向客户端应用程序.它提供 Windows Presentation Foundation (WPF).Windows 窗体.Windows Communication Foundation (WCF)和 ClickOnce 功能的简化子集.这可以为面向.NET Framework Client Profile 的 WPF.Windows 窗体.WCF 和控制台应用程序实现快速部署方案. 参看:

一起谈.NET技术,.Net Framework源代码中的模式之Prototype(原型模式)

用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 以.NET Framework 2.0 System.Collections中类为例. System.Collections. ICollection public interface ICollection : IEnumerable{} System.Collections. ICloneable  public interface ICloneable{ object Clone();} System.Collection

一起谈.NET技术,.Net Framework源代码中的模式之Decorator(装饰模式)

动态地给一个对象添加一些额外的职责.就扩展功能而言,Decorator模式比生成子类方式更为灵活. 以.NET Framework 2.0 System.IO中类为例.   System.IO.Stream public abstract class Stream : MarshalByRefObject, IDisposable { public abstract int Read([In, Out] byte[] buffer, int offset, int count); public