上一篇讲了EF直接执行SQL与存储过程的用 法

这次我们来看 EntityFramework-Plus(免费开源) 库的用法相比其他扩展库,这个更加新并且用法更加简单

这是一个对Entity Framework进行扩展的类库.支持EF EF5, EF6, EF Core,来弥补EF目前的短板

代码下载地址

支持功能:

  • 批量删除
  • 批量更新

Linq表达式

  • 从缓存查询
  • 延迟加载
  • 过滤查询

组合查询功能

1.从NUGET安装组件就OK

当然你要选择你对应的版本,并且同时你也安装了对应版本的EF版本(我选择EF6的扩展,那么我应该也对应现有的EF6)

2.操作(批量删除)

安装nuget包之后我们会发现我们平时惯用的linq表达式多了一些智能提示

好吧确实很简单,删除颜色是blue条件的所有数据

using (DBContainer ctx = new DBContainer())
{
ctx.Spl_Product.Where(a => a.Color == "blue").Delete();
}

3.操作(批量更新)

批量更新创建日期3天以前的数据,让color=red,code=xxxx

using (DBContainer ctx = new DBContainer())
{
ctx.Spl_Product.Where(a => a.CreateTime < DateTime.Now.AddDays(-)).Update(a=> new Spl_Product { Color="red" , Code="xxxx"});
}

4.设置缓存

在从缓存查询之前,我们必须引用 System.Runtime.Caching来支持系统缓存(而且可以设置缓存的时间)

下面来看怎么设置缓存:

using (DBContainer ctx = new DBContainer())
{
//查询数据之后并进行缓存
var list = ctx.Spl_Product.Where(x => x.Code=="red").FromCache(); // (EF5 | EF6) 让查询缓存维持2个小时
var list2 = ctx.Spl_Product.Where(x => x.Code=="red").FromCache(DateTime.Now.AddHours());
}

我们在查询的最后加上.FromCache和.FromCache(DateTime.Now.AddHours(2))来分别设置缓存,所以我们在第一次查询之后就可以设置缓存

  using (DBContainer ctx = new DBContainer())
{
// EF Core 的写法
var options = new MemoryCacheEntryOptions() { SlidingExpiration = TimeSpan.FromHours() };
var states = ctx.Spl_Product.Where(x => x.Color=="red").FromCache(options);
}

5.从缓存查询

using (DBContainer ctx = new DBContainer())
{
//从缓存中查询,如果没有缓存即从数据库查询
var list3 = ctx.Spl_Product.Where(x => x.Code=="red").FromCache("list");
}

注意:.FromCache("list"); list 是第四点设置的缓存

6.清空缓存

using (DBContainer ctx = new DBContainer())
{
//清空缓存
QueryCacheManager.ExpireTag(new string[] { "list", "list2" });
}

7.延迟加载

using (DBContainer ctx = new DBContainer())
{
// 没有使用缓存和延迟加载的写法
var count = ctx.Spl_Product.Count();
// 使用缓存
ctx.Spl_Product.DeferredCount().FromCache();
// 延迟查询
ctx.Spl_Product.DeferredCount().FutureValue();
}

似乎上面的七点,看起来使用方式都非常简单易懂,扩展自EF当然只是需要在后面.一下就出来,只需要记得Delete,Update,FromCaChe
下面来说最后一点,这一点比较有趣的,全局过滤,我们有时实际也是很需要用到的。那么在什么时候用下面先来看语句

8.过滤查询

//创建全局过滤
QueryFilterManager.Filter<Spl_Product>(x => x.Where(c => c.IsDel==false));
DBContainer ctx = new DBContainer();
// 让过滤生效
QueryFilterManager.InitilizeGlobalFilter(ctx); //以后的使用
//SELECT * FROM Spl_Product WHERE IsDel = true
var customer = ctx.Spl_Product.ToList();

从上面的结果可以看到我查询的结果自动加上了IsDel=false,许多场景我们有时候删除数据是逻辑删除,并不是物理删除

这时候我让所有查询都是查询IsDel为假的条件数据,而不用每一个查询语句都需要去加

似乎EntityFramework-Plus不仅仅能做的如此,他还有很多强大的功能,其他形式的查询,或者Audit追踪数据

有兴趣进阶和源码请点击跳转

ASP.NET MVC5+EF6+EasyUI 后台管理系统(90)-EF 扩展操作的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统-WebApi的用法与调试

    1:ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-WebApi与Unity注入 使用Unity是为了使用我们后台的BLL和DAL层 2:ASP.NET MVC5+EF6+Easy ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

    系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+E ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(54)-工作流设计-所有流程监控

    系列目录 先补充一个平面化登陆页面代码,自己更换喜欢的颜色背景 @using Apps.Common; @{ Layout = null; } <!DOCTYPE html> <ht ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox

    系列目录 https://yunpan.cn/cZVeSJ33XSHKZ  访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

    系列目录 本节主要知识点是easyui 的手风琴加树结构做菜单导航 有园友抱怨原来菜单非常难看,但是基于原有树形无限级别的设计,没有办法只能已树形展示 先来看原来的效果 改变后的效果,当然我已经做好了 ...

随机推荐

  1. Orchard详解--第二篇 启动

    Orchard Framework作为框架它与类库最大的区别就是框架是将一系列零散的组件组合在一起形成一个整体,接下来就对Orchard Framework如何分析Orchard如何将相关组件结合在一 ...

  2. mssql sql语句过滤百分号的方法分享

    转自:http://www.maomao365.com/?p=6743 摘要: 下文讲述sql脚本中过滤百分号的方法: 实验环境:sql server 2008 R2  百分号:在sql脚本编写中“百 ...

  3. c/c++拷贝构造函数和关键字explicit

    c/c++拷贝构造函数和关键字explicit 关键字explicit 修饰构造方法的关键字,加上了,就告诉编译器,不可以隐式初始化对象:不加就可以隐式初始化对象: 下面的代码是可以正常编译执行的,但 ...

  4. DNS区域传送漏洞实验以及二级域名爆破

    DNS区域传送漏洞实验以及二级域名爆破 目录: 1.DNS服务器的域传送漏洞(nslookup交互式.非交互式.批处理三种方式) 2.写个二级域名爆破脚本 一.DNS服务器的域传送漏洞 实验环境: 服 ...

  5. JavaScript的对象详解

    JavaScript对象的概述 什么是对象,代表现实中的某个事物, 是该事物在编程中的抽象,多个数据的集合体(封装体),用于保存多个数据的容器 为什么要用对象,便于对多个数据进行统一管理 对象属于一种 ...

  6. influxdb问题解决

    一.influxdb启动不了? 清空数据文件夹: cd /var/lib/influxdb/data rm -rf * 清除完就可以启动了,然后查看/var/lib/influxdb下data和met ...

  7. eclipse中添加server后,启动server,访问项目时,端口是怎么选择的。

    1   eclipse中添加了tomcat 2 设置端口时,可以在图2.1修改 也可以在图2.2修改 3 点击server的publish按钮,会将图2.2的配置文件和server中添加的项目同步到实 ...

  8. [python] A*算法基于栅格地图的全局路径规划

    # 所有节点的g值并没有初始化为无穷大 # 当两个子节点的f值一样时,程序选择最先搜索到的一个作为父节点加入closed # 对相同数值的不同对待,导致不同版本的A*算法找到等长的不同路径 # 最后c ...

  9. Linux:Day6(上) egrep、条件测试

    egrep及扩展的正则表达式: egrep = grep -E 扩展正则表达式的元字符: 或者:a | b 练习: 1.显示当前系统root.centos或user1用户的默认shell和UID: 2 ...

  10. 002_关于six版本过低报cannot import name urllib_parse的问题

    一. 参考:https://github.com/Parsely/pykafka/issues/222 [root@jyall.com tmp]#python check.py #报错如下 Trace ...