前言

在原生的EF框架中,针对批量数据操作的接口有限,EF扩展框架弥补了EF在批量操作时的接口,这些批量操作包括:批量修改、批量查询、批量删除和数据缓存,如果您想在EF中更方便的批量操作数据,这个扩展将对您来说很有用。

下载安装

这个框架支持通过NuGet包管理器进行安装,你可以在包管理器中搜索:EntityFramework.Extended,最简单的方法就是程序包管理控制台进行安装,安装命令如下:

PM > Install - Package EntityFramework.Extended

框架安装后,你需要在您的类中是引用如下命名空间:

using EntityFramework.Extensions;

批量更新与删除数据

在EF中默认提供的更新和删除操作,你必须首先将数据查询到内存中,这在有些时候,性能是非常差的,而通过EntityFramework.Extended你只需要通过LINQ生成表达式即可直接批量删除或更新,示例代码如下:

MyContext context = newMyContext();
context.Books.Where(b => b.Price >= 100).Delete();
context.SaveChanges();

以上示例演示批量删除图书价格大于等于100的所有记录

1
2
3
MyContext context = newMyContext();
context.Books.Where(b => b.Price >= 100).Update(b => newBook { Price = 88 });
context.SaveChanges();

  

以上示例演示将图书价格大于100所有记录的价格修改成88元

批量查询

这个扩展框架允许你将多个查询表达式包装在同一个连接进行查询,这样可以减少数据库连接数,从而提高查询性能,示例如下:

MyContext context = newMyContext();

var books = context.Books.Where(b => b.Price >= 100).Future(); //生成第一个查询表达式
var accounts = context.Accounts.Where(a => a.Money <= 10).Future(); //生成第二个查询表达式 var bookList = books.ToList(); //在同一个数据库连接上查询上面两个表达式,只访问一次数据库

在分页的时候,我们经常需要知道分页列表与总记录数,如果你用默认EF提供的方法进行查询,你需要访问两次数据库,在EF扩展框架中,您可以将获得列表与总记录数的查询包装在同一个数据库连接上进行,示例如下:

MyContext context = newMyContext();

var query = context.Books.Where(b => b.Price >= 100);
var query1 = query.Skip(pageIndex).Take(pageSize).Future();
var query2 = query.FutureCount(); var bookList = query1.ToList();
var bookTotalCount = query2.Value;

缓存查询结果

EF扩展框架允许缓存查询结果,用法示例如下:

MyContext context = newMyContext();

var books = context.Books.Where(b => b.Price >= 100).FromCache(); //不指定时间,使用默认的缓存时间
var books2= context.Books.Where(b => b.Price >= 100).FromCache(CachePolicy.WithDurationExpiration(TimeSpan.FromSeconds(300))); //将结果缓存300秒

当然,您也可以给缓存打上TAG标记,标记缓存的好处是,在以后的查询中可以设置指定的缓存过期或者获取指定TAG所缓存的数据,示例如下:

MyContext context = newMyContext();

var books = context.Books.Where(b => b.Price >= 100).FromCache(tags: new[] { "Books","100" });
CacheManager.Current.Expire("Books"); //将标记为Books的缓存立即过期

值得注意的是,EF扩展框架默认使用MemoryCache系统内存进行缓存,如果您想第三方分布式缓存框架,只需要移除系统内存缓存,注入自己的缓存提供者即可,如下用Memcache缓存结果。

Locator.Current.Register<ICacheProvider>(() => new MemcachedProvider());

以上就是EntityFramework.Extended扩展库的所有内容,来自零度分享。

http://www.xcode.me/book/entity-framework-extended

EF批量操作数据与缓存扩展框架的更多相关文章

  1. EF批量插入太慢?那是你的姿势不对

    大概所有的程序员应该都接触过批量插入的场景,我也相信任何的程序员都能写出可正常运行的批量插入的代码.但怎样实现一个高效.快速插入的批量插入功能呢? 由于每个人的工作履历,工作年限的不同,在实现这样的一 ...

  2. Asp.net 面向接口可扩展框架之“Mvc扩展框架及DI”

    标题“Mvc扩展框架及DI”有点绕口,我也想不出好的命名,因为这个内容很杂,涉及多个模块,但在日常开发又密不可分 首先说Mvc扩展框架,该Mvc扩展就是把以前的那个Mvc分区扩展框架迁移过来,并优化整 ...

  3. Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)

    接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理. 还提到EntityFramework和Dapper,EntityFramework和Dapper是.net环境下 ...

  4. Asp.net 面向接口可扩展框架之消息队列组件

    消息队列对大多数人应该比较陌生.但是要提到MQ听说过的人会多很多.MQ就是英文单词"Message queue"的缩写,翻译成中文就是消息队列(我英语差,翻译错了请告知). PS: ...

  5. Asp.net 面向接口可扩展框架之核心容器(含测试代码下载)

    新框架的容器部分终于调通了!容器实在太重要了,所以有用了一个名词叫“核心容器”. 容器为什么那么重要呢?这个有必要好好说道说道. 1.首先我们从框架名称面向接口编程说起,什么是面向接口编程?(这个度娘 ...

  6. Asp.net 面向接口可扩展框架之应用程序上下文作用域组件

    在团队中推广面向接口开发两年左右,成果总体来说我还是挺满意的,使用面向接口开发的模块使用Unity容器配置的功能非常稳定,便于共享迁移(另一个项目使用只需要复制配置和调用接口即可),如果再配合上DI那 ...

  7. Hibernate、批量操作数据

    Hibernate 批量操作数据可以使用两种方法实现 1.分批更新,每一小批同步一次数据: public void saveEmployee2(){ Session s=HibernateSessio ...

  8. 面向接口可扩展框架之“Mvc扩展框架及DI”

    面向接口可扩展框架之“Mvc扩展框架及DI” 标题“Mvc扩展框架及DI”有点绕口,我也想不出好的命名,因为这个内容很杂,涉及多个模块,但在日常开发又密不可分 首先说Mvc扩展框架,该Mvc扩展就是把 ...

  9. ehcache模糊批量移除缓存

    目录 前言 实现 总结 前言 众所周知,encache是现在最流行的java开源缓存框架,配置简单,结构清晰,功能强大.通过注解@Cacheable可以快速添加方法结果到缓存.通过@CacheEvic ...

随机推荐

  1. WPF App.xaml.cs常用模板,包括:异常捕获,App只能启动一次

    App.xaml.cs中的代码每次都差不多,故特地将其整理出来直接复用: using System; using System.Configuration; using System.Diagnost ...

  2. 关于IE9 table显示错位的问题

    首先,win10无法安装IE9,所以需要用IE11模拟IE9,这样:http://www.w10zj.com/Win10xy/Win10yh_638.html: 其次,table显示错位的可能原因:h ...

  3. Python 生成器, 迭代器, 可迭代对象的区别

    1.可迭代对象 在python中, 一切皆对象, 但凡是可以用for循环进行遍历取值的对象都可以称之为可迭代对象, 可迭代对象在程序的一个执行周期中,可以无限轮次的进行循环遍历 2.迭代器 a.一个可 ...

  4. Linux学习笔记-基本操作1

    1>. 命令解析器2>. Linux快捷键3>. Linux 系统目录结构4>. 用户目录5>. 文件和目录操作6>. 文件和目录的属性7>. 文件权限, 用 ...

  5. Docker Compose模板文件介绍

    模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多,这里面大部分指令跟 docker run 相关参数的含义都是类似的.默认的模板文件名称为 docker-compose.yml ,格 ...

  6. java后端导入excel将数据写入数据库

    参考:https://www.cnblogs.com/hanfeihanfei/p/7079210.html @RequestMapping("/importExcel.do") ...

  7. centos7下elasticSearch安装配置

    OS:Centos7x虚拟机 1H2Gjdk:1.8elasticsearch:5.6.0 1.下载“elasticsearch-5.6.0.tar.gz”解压到/usr/local/elastics ...

  8. info.plist的选项含义

    1.     Application does not run in background(鍵名:UIApplicationExistsOnSuspend)自從iOS4.0之後,當你在應用程式執行的時 ...

  9. IIS 301重定向 报错 地址后面有eurl.axd

    错误发生的原因是当ASP.NET检测到Web站点配置为使用ASP.NET 4.0,本地ASP.NET 4.0 的组件会传递一个不能扩展的 URL到ASP.NET的管理程序作进一步处理.但是,如果一个低 ...

  10. redis常用命令(一)

    一.redis常见的数据操作命令 http://redisdoc.com/ 二.键(key) keys *: 查询所有的key. exists key:判断某个key是否存在. move key db ...