看看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-10 22:20:23

看看Entity Framework 4生成的复杂的分页SQL语句的相关文章

一起谈.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(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

Entity Framework 自动生成CodeFirst代码

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

防SQL注入:生成参数化的通用分页查询语句

前些时间看了玉开兄的"如此高效通用的分页存储过程是带有sql注入漏洞的"这篇文章,才突然想起 某个项目也是使用了累似的通用分页存储过程.使用这种通用的存储过程进行分页查询,想要防SQL注入 ,只能对输入的参数进行过滤,例如将一个单引号"'"转换成两个单引号"''",但这种做法是不安全 的,厉害的黑客可以通过编码的方式绕过单引号的过滤,要想有效防SQL注入,只有参数化查询才是最终 的解决方案.但问题就出在这种通用分页存储过程是在存储过程内部进行SQ

两表合并 统计汇总-根据出库表和入库表数据统计生成出入库统计表,SQL语句写法?

问题描述 根据出库表和入库表数据统计生成出入库统计表,SQL语句写法? 比较简易的出入库管理中,出库表包括:产品名称.出库数量.出库时间:入库表包括:产品名称.入库数量.入库时间:我需要得到的是在指定时间段内的每一个产品的入库总数量 出库总数量.哪位老师可以帮我写出这个SQL语句呢?MS SQL DELPHI2010 解决方案 类似这样把,没调试,自己调测一下吧 select * from (select distinct 产品名称 from 出库表 union select distinct

entity framework自动生成数据库外键“表名_外键”的解决方案

今天在尝试使用EF的Code First功能的时候,发现EF自动生成的数据库中表字段不是自己想要的,因为一般来讲,数据库表中的外键,我们希望它的名称跟它关联的表的主键名称相同.但是EF生成的外键字段却是"被关联的表名_主键名"(如图1所示).这个很奇怪. 图1    被关联的表名_主键名的字段 下面代码是数据库表对应的实体类代码. 1 public class UserInfo 2 { 3 [Key] 4 public int UserID { get; set; } 5 public

mssql 生成‘批量Insert数据的sql语句’的存储过程

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spGenInsertSQLHan]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[spGenInsertSQLHan] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE   proc spGenIns

Entity Framework 5.0基础系列

原文:Entity Framework 5.0基础系列 1.Entity Framework简介 http://www.cnblogs.com/aehyok/p/3315991.html 2.Entity Framework DBFirst尝试http://www.cnblogs.com/aehyok/p/3318892.html 3.Entity Framework ModelFirst尝试http://www.cnblogs.com/aehyok/p/3323438.html 4.Entit

ORM映射框架总结--SQL 语句生成组件

 1.       SQL 语句生成组建 之前说过ORM框架中有一个非常重要的组件,那就是SQL语句生成组件.SQL语句生成组件,顾名思义就是用于生成sql语句的一个组件.之前的Attribute 是用于修饰实体信息,而上一章讲的实体分析器分析了实体信息,在很大一部分程度上,以上做工作就是为这个SQL语句生成组件服务的. 该组件的核心接口是IDbFactory,它实现了接口IDisposable 目前该ORM支持SQL Server 数据库的sql语句生成,在后期过程中会逐步实现对Oracle,