您的位置:首页 > 编程语言 > C#

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

2016-04-04 11:03 375 查看

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

最后的图解:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: