EF中查询的本质

UI层我直接用了窗体程序。 好了 不罗嗦 直接上代码……

 private void button1_Click(object sender, EventArgs e)
        {

            //1.0创建EF上下文容器
            phonebookEntities db = new phonebookEntities();

            //2.0 查询GropuInfo表中的 GroupId>10的所有数据
            var sql = db.GroupInfo.Where(w => w.GroupId > 10);

            //3.0将sql语法发送给db执行 返回结果集
            List<GroupInfo> list = sql.ToList();

            list.ForEach(c=>Console.WriteLine(c.GroupName));

        }

下面看看数据库的数据

下面的截图是程序执行的结果

EF查询的过程:

1.0 创建上下文容器

2.0 根据where方法 生成对应的sql语句  这个时候呢 还是木有数据的    这里的var 其实可以换成Iqueryable 来接收

这里的sql语句是:select groupid, groupName  from groupInfo  where  groupid>10

这个生成的sql语句我就不截图了  可以用sql  server再带的profile 来拦截发送到数据库的请求咯

3.0 调用Tolist() --->将生成sql 语句交给ado.net   有ado.net向DB发起请求   然后将获取到的结果集返回

或许我们会有这样一个疑问      为什么EF能够准确的生成groupinfo表的字段名和表名称呢

原因:where方法是扩展自Iqueryable上的方法      所以回去edmx中查找groupinfo的节点  然后遍历出所有的属性名称左右select 后面的字段    再根据程序员传入的lambda表达式     groupid>10  生成一个完整的sql 语句

最后的图解:

新增  删除 修改  其实大致过程差不多  只不过是EF上下文容器中的代理类的状态不同

时间: 2024-10-31 04:06:13

EF中查询的本质的相关文章

ABP 数据库 -- ABP&amp;EF中的多表、关联查询

本文介绍一下ABP中的多表查询. 1.创建实体 多表查询,在ABP或者EF中都很简单,这里我们创建一个Demo,一个学生实体.一个学校实体. 学校里面可以有很多学生,学生有一个学校. 实体如下: 学校 public class School:Entity<long> { public string Name { get; set; } public string Address { get; set; } /// <summary> /// 学校里面的学生们 /// </su

EF中自编写SQL脚本查询结果(适用于复杂SQL逻辑提高查询效率)

前不久项目开发过程中,使用的是Entity Framework做数据处理.因为本人也不是对EF太有研究,只是会用而已,但是在一次需要查询的结果需要关联3.4个表来查询出来结果,并且对查询效率也有要求.但是个人觉得遇到这样的情况还是使用原始SQL语句来查询更为可控(或许EF中有更好的方法可以解决此类问题,但恕本人愚笨只想到了这种方法).就又自己扩展出一个方法,用来专门查询自定义编写的SQL语句.代码如下: public List<T> ExecuteStoreQuery(string comma

EF中逆变和协变

EF中的增删改查: 实现步骤: 1.声明一个EF的上下文. bjhksjEntities dbContext = new bjhksjEntities(); 2.声明一个实体. HKSJ_USERS user = new HKSJ_USERS(); user.LoginName = "ssss"; user.Mail = "ssss"; user.PassWord = "ssss"; user.Plane = "ssss";

EF使用延迟加载的本质原因

原文出处:http://m.blog.csdn.net/blog/qq1010885678/38238265 [原]EF使用延迟加载的本质原因 2014-7-28阅读368 评论0 EF(Entity Framework)是微软的一个ORM框架 使用过EF的同学都知道它有一个延迟加载的功能 那么这个延迟加载的功能到底是什么? 为什么需要延迟加载? 使用延迟加载的优点和缺点又各是什么? 可以通过一个简单的小例子来阐述EF的这些问题 首先使用到了两个很简单的数据表 关系图如下: T_Product的

EF中执行sql语句

EF原理 EF 会自动把 Where().OrderBy().Select()等这些编译成"表达式树(Expression Tree)",然后会把表达式树翻译成 SQL 语句去执行.(编译原理,AST)因此不是"把数据都取到内存中,然后使用集合的方法进行数据过滤",因此性能不会低.但是如果这个操作不能被翻译成 SQL 语句,则或者报错,或者被放到内存中操作,性能就会非常低 跟踪EF的查询Sql语句: DbContext 有一个 Database 属性,其中的 Log

数据库事务及其EF中如何处理事务

一.基础知识 1)         使用事务级别ReadUnCommited 会产生脏读现像,意味着读取到的为UnCommited(未提交)的数据.怎么理解呢?在使用该隔离级别的事务开始后.更新了数据库某一行的数据,但是事务的工作量比较大,后续还有一大堆代码还没执行完呢.不巧的是有个哥们过来读数据了,这个时候读到的就是未提交的值,如果后继工作一切正常,也没什么影响.一旦后面的代码执行中出错,就会产生不一致的错误,适用于对事务极度自信的情况下,特点为可读不可改.关于不可改需解释一下,MS SQL中

EF中的增删改查

在上一篇中简单的介绍了一下有关EF的一些概念,都是小编的一些个人理解,懂的不多,想深入学习的可以从网上查看一些其他资料. 下面紧接着上一篇所说,来从代码上看一下EF容器是如何实现与后台数据库之间的增删改查的. 1.EF包装类 什么是EF包装类呢?举个例子,我们平时用SQL语句写增删改查时,用的都是一些Insert.Update.Delete等语句来实现增删改查,所以我们把放到EF容器的东东也要做一个标签,来指明这个东东是要添加.更新.还是要删除呢. 正如上图所示就是这么简单的操作,就完成了对数据

EF中使用SQL语句或存储过程

EF中使用SQL语句或存储过程或视图 1.无参数查询var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToList(); 2.有参查询var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes where [email protected] ",new SqlParameter

C# 在EF中直接运行SQL命令

相信不少使用EF的同志们已经知道如何在EF中运行SQL命令了.我在这里简单总结下,希望对大家学习EF有所帮助! 在 EF第一个版本(.NET 3.5 SP1)中,我们只能通过将ObjectContext.Connection转换为EntityConnection,再把 EntityConnection.StoreConnection转换为SqlConnection.有了这个SqlConnection,我们再创建 SqlCommand便能顺利运行SQL命令了.(个人觉得其实很烦,呵呵) 例如: E