码迷,mamicode.com
首页 > 其他好文 > 详细

EF中查询的本质

时间:2016-04-04 11:50:03      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

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上下文容器中的代理类的状态不同

EF中查询的本质

标签:

原文地址:http://www.cnblogs.com/soaeon/p/5351576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!