前言

今天我们来讲讲EntityFramework.Extended

首先科普一下这个EntityFramework.Extended是什么,如下:

这是一个对Entity Framework进行扩展的类库.

完全支持EF 5.0/6.0+,

GitHub地址 https://github.com/loresoft/EntityFramework.Extended,

最后一次更新是在2015/07/10

这个库支持批量更新,删除。查询结果缓存和审计日志。

这个扩展对于每次批量操纵只生成一条sql语句,而不会像EntityFramework供给的原生办法那样批量N条数据就要生成N条sql语句

本文采用的环境与技术

系统:WIN7

数据库:SQL Server2008

相关技术:MVC5+EF6.1.3+EntityFramework.Extended6.0

第一章:批量操作数据库

批量删除:

//记得引用using EntityFramework.Extensions;//这两种写法都可以,Context是你的EF上下文对象.context.LogData.Delete(a => a.EntityKey == "aa");
context.LogData.Where(a => a.EntityKey == "aa").Delete();

批量更新:

//data为修改的行数int   data =context.LogData.Where(a=>a.EntityKey=="aa").Update(b=> new LogData { EntityName = "ss" });//第二种写法,这种是针对DbSet的,已经标注过时了var data = context.LogData.Update(a => a.EntityKey == "aa",b=> new LogData { EntityName = "ss" });

批量增加:

//这个和Extended无关..EF本身就自带了,单纯的给新手一个实例而已,大神无视..int data= context.LogData.AddRange(new List<LogData>());

第二章:批量查询数据库

批量查询:

原理是这样的:

E文原文:

Future queries work by creating the appropriate IFutureQuery object that keeps the IQuerable. The IFutureQuery object is then stored in IFutureContext.FutureQueries list. Then, when one of the IFutureQuery objects is enumerated, it calls back to IFutureContext.ExecuteFutureQueries() via the LoadAction delegate. ExecuteFutureQueries builds a batch query from all the stored IFutureQuery objects. Finally, all the IFutureQuery objects are updated with the results from the query.

本屌的辣鸡二流子翻译:

Future 会根据IQuerable创建出他自定义的IFutureQuery对象,然后将他加入到IFutureContext.FutureQueries查询队列当中,当队列中的一个对象调用LoadAction那么就会执行IFutureContext.ExecuteFutureQueries()方法, ExecuteFutureQueries 会构建一个批处理查询的IFutureQuery,最后将所有IFutureQuery的查询结果进行更新(也就是查询).

第三章:EF的数据审计日志

数据审计日志:

先说一下这个审计的概念,就是对所有的实体的操作(增,删,改)进行监控.

我们先来看一下效果.

这是他追踪到的信息,我们可以很方便的把这些信息存入数据库或者你的日志存储里(文本,XML,缓存)都行 随你.

下面我们开始讲解用法:

首先我们可以在应用程序的入口( Application_Start)配置(我这里以MVC的Web应用来举例):

这里的配置可不加,用默认的也行,当然有需要的可以参考

https://github.com/loresoft/EntityFramework.Extended/wiki/Audit-Log

这里有更详细的配置介绍

下面我们开始直接用,

举个栗子:

最终结果如下:

可以看到我们很方便的监控到了我们刚刚进行的三次操作.

(重要提示:这里需要注意的是,这里的审计日志只能监控到常规的写法的增删改,对于上面的批量增删改很诡异的是监控不到的,作为自己写的扩展库,自己却监控不到 - -,这不得不说是很蛋疼..)

第四章:查询缓存

代码如下:

这个我用的不多,就不详细的赘述了,有兴趣的朋友可以自行查看

https://github.com/loresoft/EntityFramework.Extended/wiki/Query-Result-Cache

写在最后

文章到此就结束了,写文章的过程也是自己温故而知新的过程.写的不好希望大神多多指正,我很希望能起到抛砖引玉的效果,上篇文章就得到了很多好的建议,希望大家不啬赐教

原文地址:http://www.cnblogs.com/GuZhenYin/p/5482288.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)相关推荐

  1. efcore 批量_【EF Core】Entity Framework Core 批处理语句

    在Entity Framework Core (EF Core)有许多新的功能,最令人期待的功能之一就是批处理语句.那么批处理语句是什么呢?批处理语句意味着它不会为每个插入/更新/删除语句发送单独的请 ...

  2. Entity Framework技术系列之1:数据访问技术概述

    前言 .NET Framework自2002年发布以来,已经历了十来个年头.相应的,.NET平台上的数据访问技术也在不断发展,从最基础的ADO.NET,到SqlHelper简单帮助类,到DAAB(Da ...

  3. Entity Framework技术系列之2:三种开发模式实现数据访问

    前言 Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发流程大相径庭,开发体验完全不一样.三种开发模式各有优缺点,对 ...

  4. (翻译)Entity Framework技巧系列之一 - Tip 1 - 5

    本系列英文原文出自. 提示1. 在Entity Framework中怎样排序关系(Relationships) 问题: 在Entity Framework论坛中常会看到关于排序相关联项目的问题. 例如 ...

  5. Entity Framework技巧系列之十一 - Tip 42 - 45

    提示42. 怎样使用Code-Only创建一个动态模型 背景: 当我们给出使用Code-Only的例子,总是由创建一个继承自ObjectContext的强类型的Context开始.这个类用于引导模型. ...

  6. Entity Framework技巧系列之二 - Tip 6 - 8

    提示6. 如何及何时使用贪婪加载 什么时候你需要使用贪婪加载? 通常在你的程序中你知道对查询到的实体将要进行怎样的操作. 例如,如果你查询一个订单以便为一个客户重新打印,你知道没有组成订单的项目即产品 ...

  7. Entity Framework 实践系列 —— 搞好关系 - 单相思(单向一对一,one-to-one)

    原以为躲入代码世界,就可以不用搞关系,哪知"关系无处不在".写代码多年之后,终于明白"面向对象的关键是搞好对象之间的关系".而Entity Framework作 ...

  8. Entity Framework Core系列教程-25-Entity Framework Core日志

    Entity Framework Core日志 我们经常需要在EF Core中记录SQL并更改跟踪信息以进行调试. EF Core日志记录自动与.NET Core的日志记录机制集成.因此,在隐含使用E ...

  9. Entity Framework Core系列教程-23-原生SQL查询

    在Entity Framework Core中执行原生SQL查询 Entity Framework Core提供了DbSet.FromSql()方法来对基础数据库执行原始SQL查询,并将结果作为实体对 ...

最新文章

  1. 在Ubuntu 14.04 64bit上编译安装xbt tracker
  2. 【热烈祝贺】俺们的S5PV210 工控板终于启动到wince桌面了!
  3. Github-Hexo-theme-NexT
  4. 驱动依赖_「世经研究」焦炭行业--仍旧依赖政策驱动
  5. JSP EL表达式 将数组拼接成字符串
  6. python库有什么用_Python程序员必知什么 常用的Python库有哪些
  7. Mysql批量更新的一个坑-allowMultiQueries=true允许批量更新
  8. SQL 安装在DC上的问题
  9. 鸿蒙系统受谷歌影响吗,华为鸿蒙系统,会受到人们的欢迎吗?
  10. java记住用户名和密码_JAVA--高级基础开发Cookie实现记住用户名和密码
  11. 实践 | Sentinel 扩展性设计 1
  12. java对话框可以设置颜色吗_java文本域颜色设置对话框.doc
  13. 基于MATLAB的视频车辆跟踪和计数系统仿真
  14. Spring常用注解(绝对经典)
  15. 大厂面试必备之设计模式:漫画适配器模式
  16. 都说web前端开发薪资高,入行就有上万月薪,转行难吗?
  17. 司马相如——草根逆袭凭借千古情诗赢得白富美,从此走向人生巅峰
  18. php eval函数的用法,php eval函数用法详解
  19. 此地不留爷,自有留爷处
  20. Pandas数据显示不全?快来了解这些设置技巧! ⛵

热门文章

  1. jQuery中,选择器既匹配开头又匹配结尾
  2. protobuf在java应用中通过反射动态创建对象
  3. Http协议Get方式获取图片
  4. 2009从知到行知识管理培训公开课最后一期
  5. 提的最多的数据库“索引”,先来简单了解一下
  6. NET问答: 如何记录 EntityFramework 中的所有 SQL 日志 ?
  7. 在 .NET 中使用 Flurl 高效处理Http请求
  8. 读书 | 数字化转型的道与术(上)
  9. C# WPF:把文件给我拖进来!!!
  10. 搭建一套ASP.NET Core+Nacos+Spring Cloud Gateway项目