Entity Framework查询原理
Entity Framework查询原理
前言
Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。
Entity Framework的主要特点:
1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2);
2. 强劲的映射引擎,能很好地支持存储过程;
3. 提供Visual Studio集成工具,进行可视化操作;
4. 能够与ASP.NET, WPF, WCF, WCF Data Services进行很好的集成。


思考?有EF我们就不用自己写SQL语句了,EF到底做了哪些事情了,我们来探索一下?
我们知道edmx文件是EF的元数据那么我们用XML方式打开EDMX文件可以看到如下所示数据:

图中的SSDL就表示数据库的配置节点,CSDL实体配置节点,C-S实体和数据库的关系映射。
我们发现SSDL配置节点中的GroupInfo节点XML数据和我们数据中的数据完成符合。如下图

SSDL就表示数据库的配置节点中的GroupInfo

CSDL实体配置节点中的GroupInfo

C-S实体和数据库的关系映射中的GroupInfo

了解了这些,那么我们看看EF到底是怎么生成SQL的

private void button1_Click(object sender, EventArgs e)
{
//1.0 实例化EF上下文容器类的对象
PhoneBookEntities db = new PhoneBookEntities(); //2.0 查询GropuINfo中的ID<209所有数据
db.GroupInfo.Where(c => c.GroupId < 209).ToList().ForEach(c => Console.WriteLine(c.GroupName));
}


从上图中的代码和分析图我们可以看出:
1.EF紧紧是做了一层包装,最终还是要在底层调用Ado.NET
2.EF只是负责生成SQL语句,发送给Ado.NET,Ado.NET负责从DB中读取数据,最终返回给我们的EF
3.EF中edmx元数据获取DB表的结构的描述
4.我们要生成的查询SQL语句 select GroupId,GroupName,GroupType from GroupInfo这些可以从元数据中获取where之后的条件可以由我们的c => c.GroupId < 209提供
由此EF的神秘面纱被我们揭开~~~
Entity Framework查询原理的更多相关文章
- [原创]Entity Framework查询原理
前言 Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架.Ent ...
- Entity Framework查询生成大量的子查询,如何避免?求救
最近使用Entity Framework做一个中型的项目,一张表含有千万条数据,并没有使用很复杂的查询,只是程序上使用了DTO进行帅选数据,且使用了分页,效果很不理想.经过跟踪sql,我发现很多简单的 ...
- 如何得到EF(ADO.NET Entity Framework)查询生成的SQL? ToTraceString Database.Log
ADO.NET Entity Framework ToTraceString //输出单条查询 DbContext.Database.Log //这里有详细的日志
- C# Entity Framework查询小技巧 NoTracking
在使用Entity Framework做查询的时候,如果只需要显示,而不用保存实体,那么可以用AsNoTracking()来获取数据. 这样可以提高查询的性能. 代码如下: var context = ...
- Entity Framework查询注意
首先我们看下where的方法,直接查看定义(定义如下),其实一种是对IEnumerable的扩展,一种是对IQueryable的扩展,直接看最常用的,其实区别就在IEnumerable的扩展的参数是系 ...
- Entity Framework查询
Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). ...
- 解决Entity Framework查询匿名对象后的跨域访问的一种方式
在Entity Framework中,可以使用lambda表达式进行对数据的查询,而且可以将查询结果直接映射为对象或者对象列表,这极大的提高的开发速度,并且使数据层的数据更加方便处理和传递.但是很多时 ...
- Entity Framework的原理及使用方式
ADO.NET Entity Framework操作数据库的过程对用户是透明的(当然我们可以通过一些工具或方法了解发送到数据库的SQL语句等).我们唯一能做的是操作EDM,EDM会将这个操作请求发往数 ...
- 一个最简单的使用Entity Framework 查询SQL 数据库的例子
1.ADO.NET 3.5 Entity Framework是随着.net framework 3.5一起发布的,确认开发环境版本是大于等于3.5版本 2.确认已经安装了ADO.NET 3.5 Ent ...
随机推荐
- Jenkins(二) 安装、新建Jobs与删除及SVN配置(转)
官网首页(https://jenkins-ci.org/)就提供了windows版本的Jenkins安装包.可以自己下载一个用于学习.安装后自动打开http://localhost:8080,就可以看 ...
- iOS_动态插入或删除行
终于效果图: 分MVC三层设计;自己定义的Cell有两种;一种是MainCell,由ModelArr提供数据源;还有一种是插入的cell,由代码创建,而且由另外一个数组供状态数据 数据源部分: wat ...
- STM32F4xx时钟理解
理解力STM32时钟是我们的应用定时器等的基础,据总结近期工作: 以下是一STM32时钟树: 1.首先注意的的是图中画绿色圈圈的两个,HSE和HSI分别表示外部时钟和内部时钟,当中HSE 是是快速外部 ...
- Android:ViewPager扩展的具体解释——导航ViewPagerIndicator(有图片缓存,异步加载图片)
我们已经用viewpager该. github那里viewpager扩展,导航风格更丰富.这个开源项目ViewPagerIndicator.非常好用,但样品是比较简单,实际用起来是非常不延长.例如,在 ...
- redhat6.3已安装was6.1你可以不弹出安装程序
这在为期两天的课程redhat6.3安装was6.1 使用Xmanager打开图形界面.进入/WAS夹,跑./install 它有一个直接跳转,不管是什么反应,起初我以为这个问题的图形界面,搜索了半天 ...
- VS2012 安装出错 :通道正在关闭
从微软官网下的安装包iso,解压后安装时总是出现 3个错误,提示什么管道正在关闭,看了很多解决办法,挑了一个简单的:安装包有问题,重新下载一个,就好了(持续更新....)
- 使用Heroku,需要locale至zh_CN,代替zh-CN
使用Heroku.需要locale至zh_CN,代替zh-CN 我认为这是由于在application.rb于,config.i18n.default_locale默认接受值这是Symbol, 而当我 ...
- POJ--1679--The Unique MST【推断MST是否唯一】
链接:http://poj.org/problem? id=1679 题意:告诉你有n个点,m条边,以及m条边的信息(起点.终点.权值).推断最小生成树是否唯一 之前是用另外一种方法做的.复杂度最高可 ...
- mysql函数二
四.条件推断函数 1.if(expr,v1,v2)函数:成立返回结果v1,否则结果v2 例:select id,if(grade>=60,'pass','fail') from t; 2.IFN ...
- Arrays.asList的那点事
import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List ...