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