C# mvc--EF中查询的本质

时间:2021-11-15 15:23:51

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

 private void button1_Click(object sender, EventArgs e)
        {

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

            //2.0 查询GropuInfo表中的 GroupId>10的所有数据
            );

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

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

        }

下面看看数据库的数据

C# mvc--EF中查询的本质

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

C# mvc--EF中查询的本质

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 语句

最后的图解:

C# mvc--EF中查询的本质