上一篇讲了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. Linux网卡聚合时,其中一个网卡有两种配置的解决方法

    先来看看: ficonfig 其中第一网卡是ssh使用: 第二个网卡是在Linux 最小化安装后IP的配置(手动获取静态IP地址)这个文章中配置过ip是192.168.1.2:在Linux重命名网卡名 ...

  2. MySQl ifnull()和substr()

    SUBSTR(str,pos,len) substr用来截取字符串: str 被截取的字符串 pos 开始位置 len 长度 举个例子: substr('abc',1,2)='ab' IFNULL(e ...

  3. SQL SERVER启动步骤

    第一步 从注册表读取SQL SERVER启动信息 (1)Audit  Level:设置SQL SERVER是否记录用户登陆信息 Login Mode:设置SQL SERVER登陆类型是只接受windo ...

  4. 自动化测试基础篇--Selenium鼠标键盘事件

    摘自https://www.cnblogs.com/sanzangTst/p/7477382.html 前面几篇文章我们学习了怎么定位元素,同时通过实例也展示了怎么切换到iframe,怎么输入用户名和 ...

  5. echo 在shell及脚本中显示色彩及闪烁警告效果

    在shell脚本编写中,echo用于输出字符串等提示信息,当我们需要格外显示色彩及闪烁效果如下: 一.在执行shell中显示色彩: 语法格式: echo -e "\033[颜色1:颜色2m ...

  6. [Hive_3] Hive 建表指定分隔符

    0. 说明 Hive 建表示例及指定分隔符 1. Hive 建表 Demo 在 Hive 中输入以下命令创建表 user2 create table users2 (id int, name stri ...

  7. Linux:固定 ip

    默认情况下,安装完操作系统时,ip是采用dhcp来动态分配的.通常我们需要将其固定下来. 不然 每次系统重启后,ip都会变动,这样会给日常工作带来不必要的麻烦的. 下面就是在rhel .centos  ...

  8. 自定义实现HashMap的put、get方法

    public class HashMap{ public static void main(String[] args){ put("aa", "wo ai ni&quo ...

  9. spring boot 的maven设置阿里云仓库

    <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> ...

  10. selenium 使用

    selenium selenium:可以让浏览器完成相关自动化的操作 环境安装: pip install selenium 编码流程: 导包 创建某一款浏览器对象 制定相关的行为动作 from sel ...