EF查询生成的SQL

在EF 4和EF 3.5 SP1中,我们可以使用ToTraceString()方法得到EF查询所生成的SQL。

 1 using (var context = new TestDBEntities())
 2 {
 3     var query = from p in context.Parents
 4                 where p.Name == "zhaokun"
 5                 select p;
 6
 7     ObjectQuery<Parent> parents = query as ObjectQuery<Parent>;
 8     if (parents != null)
 9     {
10         string sql = parents.ToTraceString();
11     }
12 }

totracestring

这里所生成的SQL为:

1 [Extent1].[ParentID] AS [ParentID],
2 [Extent1].[Name] AS [Name]
3 FROM [dbo].[Parent] AS [Extent1]
4 WHERE N‘zhaokun‘=[Extent1].[Name]

sqlone

在EF 4.1中,我们可以直接调用DbQuery<>的ToString()方法得到所生成的SQL。

1 using (var context = new MyDbContext())
2 {
3     var people = from p in context.People
4                  where p.PersonID > 100
5                  select p;
6
7     string sql = people.ToString();
8 }

tostring

所生成的SQL是:

1 SELECT
2 [Extent1].[PersonID] AS [PersonID],
3 [Extent1].[Name] AS [Name]
4 FROM [dbo].[People] AS [Extent1]
5 WHERE [Extent1].[PersonID] > 100

sqltwo

这里的ToString()方法其实也就是调用了ObjectQuery<>的ToTraceString()方法。 DbQuery<>.ToString() ==>  System.Data.Entity.Internal.Linq.InternalQuery<>.ToString()方法,此方法 在.NET Reflector得到的实现是这样的:

1 public override string ToString()
2 {
3     return this._objectQuery.ToTraceString();
4 }

tostring()

看书得到!

时间: 2024-10-20 23:32:10

EF查询生成的SQL的相关文章

学习笔记11 EF查询相当于sql 中的 where in

两种写法 1. int[] Ids={1,2,3} DBContainer db=new DBContainer(); var list=db.表明.where(a=>Ids.Contains(a.列名)) 2. int[] Ids={1,2,3} DBContainer db=new DBContainer(); var list=from r db.表明  where Ids.Container(r.列名)   select r; 原文地址:https://www.cnblogs.com/W

EF生成的SQL语句执行顺序问题。

//实体被更改后,再做删除,EF只生成删除语句 //实体删除后再更改,EF报错 //添加语句会再,更改,删除后执行,更AddObject位置无关 //一个实体多个字段被改,只会生成一句update //多个表的update语句,会按表名顺序先后执行 //两个SaveChanges同时涉及多张表时,不会因为写入顺序(都是排序后的)不同而产生死锁 //update 多个update之间按表名来 --> delete(顺序同上 )->insert(顺序同上) //需要避免与ctx.ExecuteSt

C# 查看EF生成的SQL语句

用sqlsever追踪最后的sql语句. 返回IQueryable<T>类型, 里面封装的就是生成的SQL脚本,设置断点queryable = DataContext.Set<T>().Where<T>(whereLambda).AsQueryable(); queryable 右键快速监视, 或者ToString()返回字符串类型直接打印输出都能看到sql脚本. 打开SQLServer - 工具 - SQL Server Profiler 上查看执行的SQL语句. 原

使用工具追踪Entity Framework生成的SQL

学习entity framework期间收集的文章,转自http://www.cnblogs.com/hiteddy/archive/2011/10/01/Difference_among_IQueryable_IEnumeralb_IList_in_Entity_Framework.html 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Top

EF查询数据库框架的搭建

一个简单的EF查询框架除了运行项目外,大概需要5个类库项目,当然这个不是一定要这样做,这可以根据自己的需要设置有多少个项目.这里介绍的方法步骤只适合EF零基础的人看看就是了. 在开始之前,先建立一个运行项目,不管是MVC还是winfrom项目,只要能运行就OK,这是为了在后面能测试EF框架的地方. 一.模型项目.这个项目主要负责与数据库映射的,里面的类都是数据库表的实体. 首先在解决方案中建一个文件夹EFModel,这里将会收纳所有的与EF查询有关的项目,这样做只是为了将他们与运行项目分开而已,

Entity Framework 4.1 之八:绕过 EF 查询映射

原文名称:Entity Framework 4.1: Bypassing EF query mapping (8) 原文地址:http://vincentlauzon.wordpress.com/2011/04/21/entity-framework-4-1-bypassing-ef-query-mapping-8/ 看到 Entity Framework 4.1 推荐英文教程,为了帮大家看起来方便一些,简单翻译一下.这是一个系列,共有 8 篇,这是第 8 篇. Entity Framework

即使用ADO.NET,也要轻量级动态生成更新SQL

不管出于什么原因,有时候框架人员摒弃了NH或EF,而使用原生数据库访问对象. 为了优美的编程,用上我写的轻量级动态生成更新SQL扩展方法吧 还记得在EF中只更新修改过的字段时,我们这么写: var e = db.Entry(d); e.State = EntityState.Unchanged; d.UploadTime = DateTime.Now; e.Property("UploadTime").IsModified = true; db.SaveChanges(); 目的是,使

EntityFramework Core 2.0执行原始查询如何防止SQL注入?

前言 接下来一段时间我们来讲讲EntityFramework Core基础,精简的内容,深入浅出,希望为想学习EntityFramework Core的童鞋提供一点帮助. EntityFramework Core执行原始查询 在EntityFramework Core中执行原始查询我们借助FromSql来实现,如下: using (var context = new EFCoreDbContext()) { var orders = context.Orders .FromSql("SELECT

EF查询之性能优化技巧

前言 EF相信大部分同学都已经经常使用了,可是你的查询高效吗? 今天我就以个人使用经验来讲讲在使用EF做查询的时候大家都容易忽略的性能提升点. 本文将继续接着上一篇(EF使用CodeFirst方式生成数据库&技巧经验)来写 数据准备   查询监视 EF生成的sql语句是什么样子的呢?我们有多种方式查看到. 通过SQL Server Profiler来监控执行的sql语句 使用插件MiniProfiler来监控执行的sql语句 MiniProfiler的具体使用请点击查看 测试代码: var pr