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 ...
随机推荐
- 获取Winform窗体、工作区 宽度、高度、命名空间、菜单栏高度等收集
MessageBox.Show("当前窗体标题栏高"+(this.Height - this.ClientRectangle.Height).ToString());//当前窗体标 ...
- Chapter 1 Securing Your Server and Network(10):使用扩展保护避免授权中继攻击
原文:Chapter 1 Securing Your Server and Network(10):使用扩展保护避免授权中继攻击 原文出处:http://blog.csdn.net/dba_huang ...
- Android应用程序绑定服务(bindService)的过程源码分析
Android应用程序组件Service与Activity一样,既能够在新的进程中启动,也能够在应用程序进程内部启动:前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部 ...
- linux下getsockopt和setsockopt具体解释及測试
linux下getsockopt和setsockopt具体解释及測试 NAME 名字 getsockopt, setsockopt - get and set options on sockets 获 ...
- Top与ROW_NUMBER
论Top与ROW_NUMBER读取第一页的效率问题 前一段时间研究关于分页的问题,由于数据库属于百万级的,考虑了关于优化方面的问题.其中一个考虑是:第一页展现的频率肯定是最高的,所以我想第一页就使 ...
- window批处理-4.call
作用: 批处理中调用还有一个批处理或调用行号后的全部命令 格式: call [FileName] [:label] demo: call.bat: @echo off echo 開始调用called ...
- Lichee(三) Android4.0该产品的目标文件夹,Lichee链接---extract-bsp
由<Lichee() 在sun4i_crane平台下的编译>介绍了编译lichee的基本情况,我们终于得到了编译后的结果例如以下: out/ ├── android │ ├── bIm ...
- Android Studio 快捷键整理分享
Alt+回车 导入包,自己主动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成 ...
- DOM attributes and properties
element :attributes : DOM objects : properties 一个是元素属性的叙述性说明,它是对象属性的叙述性说明 版权声明:本文博客原创文章,博客,未经同意,不得转载 ...
- ASP.NET查询页面设置form的action属性只弹出一个页面,并且每次将页面设置到最前
原文:ASP.NET查询页面设置form的action属性只弹出一个页面,并且每次将页面设置到最前 背景 当数据量大.查询条件复杂,多样多的时候,我们可能需要单独做一个查询界面,当用户选择设置了相关的 ...