entity framework 新手入门篇(4)-entity framework扩展之 entityframework.extended
对于EF的操作,我们已经有了大概的了解了,但对于实战来说,似乎还欠缺着一些常用的功能,那就是批量的删除,更新数据。
承接上面的部分,我们有一个叫做House的数据库,其中包含house表和seller表。
一、使用原生EF如何实现批量删除和修改?
//批量修改public static bool UpdateAllPrice(decimal price){bool isOk = false;using (HouseEntities db = new HouseEntities()){var houseList = db.House.ToList();//首先获取所有房屋的列表(相当于select * from house,虽然实际会把*替换为所有字段,这样能提升性能)houseList.ForEach(x => {x.Price = price;//做一个foreach操作来把每一项的价格改为传入的价格db.Entry(x).State = System.Data.Entity.EntityState.Modified;//把修改后的实体标为已修改 });isOk = db.SaveChanges() > 0;//若修改数量大于0说明成功 }return isOk;}//批量删除public static bool DeleteHouseByRegion(string region){bool isOk = false;using (HouseEntities db = new HouseEntities()){var houseList = db.House.Where(x=>x.Region==region).ToList();//首先获取符合条件的房屋的列表houseList.ForEach(x =>{db.Entry(x).State = System.Data.Entity.EntityState.Deleted;//把修改后的实体标为已删除 });isOk = db.SaveChanges() > 0;//若修改数量大于0说明成功 }return isOk;}
由上面的示例代码可以看到。无论是批量删除、修改部分数据,还是所有数据。首先都需要对操作对象进行查询并实例化,再使用遍历方法对其进行修改,删除。
这种方式看起来十分奇怪,以前用SQL,Delete House where region='xxx',或者update house set price=123.123所能实现的功能,现在竟然浪费了这么多的功夫,光是浪费功夫也就算了,EF这种写法在性能上也存在着十分巨大的问题(光是每次查询就够浪费性能的了,更别说维护实例的状态,好在EF会对没有更新的对象撤销UPDATE操作,但感觉还是得不偿失)。
那问题在这里已经很明显了,如何解决它呢?那就要用到entityframework中一个非常好用的扩展“Entityframework.Extended”。这是一个开源的扩展类库,需要.NET 4.0以上的版本才能够支持。你可以在nuget和github上找到它。它使用Lambda表达式树的形式,对对象进行了解析,在解析后直接生成SQL指令来完成数据库操作,相比传统SQL来说,这样做不仅使我们的代码更加优美,在安全性和性能方面,也使我们更加放心。
二、Entityframework.Extended安装
和其他类库一样,安装的时候只要在NUGET上进行搜索就行了,如果搜索不到请尝试添加8.8.8.8来做DNS服务器(实在找不到就等等吧,国外网站经常被墙,哪怕是正常的网站)。
如上图所示即可完成安装(什么?你找不到nuget?好吧,我想我的第一篇文章和VS右上角自带的搜索框能帮助你。
三、使用Entityframework.Extended实现批量删除和修改
//批量更新public static bool UpdateAllPrice(decimal price){bool isOk = false;using (HouseEntities db = new HouseEntities()){isOk = db.House.Update(x => new House() { Price = price }) > 0;//直接会生成update house set price=xxx的语句并返回受影响行数,这里的X无实际作用,但作为MemberInitExpression,其却是不可缺少的一个部分,这里要注意,不能先new对象再进行对象传输,因为抓取准确字段的时候,我们要用到init表达式,如果对象已经被生成,所有非空字段都将被初始化,这对我们来说,完全不必要。 }return isOk;}//批量删除public static bool DeleteHouseByRegion(string region){bool isOk = false;using (HouseEntities db = new HouseEntities()){isOk = db.House.Where(x => x.Region == region).Delete() > 0;//在where后面直接跟Delete就可以实现批量删除了, 是不是很方便? }return isOk;}
上面的代码就是使用extended扩展库之后的写法了,不仅整个代码优美了许多,更实现了更好的性能。在使用扩展库之前,别忘了引用EntityFramework.Extensions命名空间,扩展类是没有SDK自动提醒的。
另外,大家有没有发现?我之前说的,修改,删除,添加操作后一定要savingchanges(),这里没写,是不是错了?当然不是,扩展库直接生成了SQL语句并采用了ADO.NET的方式进行了执行,所以并不需要写savingchanges,在这些扩展方法执行之后就会返回受影响的行数了。
转载于:https://www.cnblogs.com/Damos/p/EF_4.html
entity framework 新手入门篇(4)-entity framework扩展之 entityframework.extended相关推荐
- 计算机与交换机基础配置入门,新手入门篇:交换机配置窍门深入学习 -电脑资料...
新手入门篇:交换机配置技巧深入学习,关于交换机配置技巧的问题,涉及到的东西比较多, 交换机配置技巧一直以来是非常神秘的,不仅对于一般用户,对于绝大多数网管人员来说也是如此,同时也是作为网管水平高低衡量 ...
- android 蒙版图片带拖动_黑橙修图:新手入门篇2-一句话带你认识图层蒙版
大家好,这里是黑橙修图新手入门教程系列. 上一篇文章我么介绍了ps当中最核心的一个概念--图层.那么这篇文章带大家来了解一个与图层密切相关的概念--图层蒙版. 其实,图层蒙版也是一个类似图层的东西,只 ...
- CTF-攻防世界web新手入门篇
CTF-攻防世界web新手入门(全) 攻防世界网址 1.view_source 2.robots 3.backup 4.cookie 5.disabled_button 6.weak_auth 7.s ...
- java 英雄联盟回合战斗_如何赢得一场英雄联盟的战斗新手入门篇
导读:如何赢得一场英雄联盟的战斗?这里面存在非常多的因素,本文是英雄联盟欧服一篇非常入门级的心得手册,新手请进来看看,高手也可以随意看看. 综述 英雄联盟不是刷钱游戏,也不是杀人游戏,更不是类似炮塔防 ...
- java微博开发_【新手入门篇】新浪微博应用开发之Java入门篇
新浪微博应用开发之Java篇 2012年11月11日星期日 一.开发流程简介: 2. 在以下地址创建一个应用,假设创建一个桌面应用: 3. 进入管理中心,查看并记住应用ID和密码: 4. 在&q ...
- 【新手入门篇】新浪微博应用开发之Java入门篇
新浪微博应用开发之Java篇 2012年11月11日星期日 一.开发流程简介: 1. 访问http://open.weibo.com/注册成为开发者 2. 在以下地址创建一个应用,假设创建一个桌面 ...
- 嵌入式linux学习路径--新手入门篇
嵌入式linux如何入门? 前言 基础概念 计算机与嵌入式的关系 操作系统是什么? 程序 网络 ARP IP ICMP TCP UDP DNS DHCP FTP HTTP linux系统命令 目录相关 ...
- springboot 关闭懒加载_SpringBoot新手入门篇
SpringBoot是干哈的 介绍:springboot是由Pivotal团队提供的全新框架.spring的出现是为了解决企业级开发应用的复杂性,spring的通过注册bean的方式来管理类,但是随着 ...
- 大数据新手入门篇之Linux网络系统
Linux网络系统 网络信息 修改主机名 # hostname node01 //本次登录修改 # hostname //查看主机名# vi/etc/hostname //永久修改 # shutdow ...
- SpringBoot是什么?干嘛用的?(新手入门篇)
SpringBoot是干哈的 介绍:springboot是由Pivotal团队提供的全新框架.spring的出现是为了解决企业级开发应用的复杂性,spring的通过注册bean的方式来管理类,但是随着 ...
最新文章
- CODEFORCES 55D
- Python入门(一)了解与安装
- 图解matlab基本操作
- HOWTO:如何在代码中获取安装包目标机上的Windows Installer(MSI)版本
- OpenCV通过维纳滤镜恢复散焦图像的实例(附完整代码)
- 安装ubuntu系统步骤
- 第一次接触终极事务处理——Hekaton
- c语言a b的和 不用加号,力扣(LeetCode)刷题,简单题(第16期)
- JSP弹出窗口和模式对话框
- Json 转换 1 转成 true 0 转成false
- iphone目录结构
- 极限编程(XP)简介
- 【我的Android进阶之旅】解决Jenkins编译出现的Gradle错误:Gradle build daemon disappeared unexpectedly
- 基于JAVA语言设计的快递系统
- PDF如何免费转Word
- 4——Hive数仓项目完整流程(在线教育)
- Xilinx FPGA器件的速度等级
- 学计算机的电脑尺寸多大合适,电脑机箱尺寸一般是多少?对电脑有何影响?
- 以wifi为媒介,linux系统与android设备交互
- 第14章-Spring AOP通知(Advice)详解