ASP.NET MVC5+EF6+EasyUI 后台管理系统(90)-EF 扩展操作

上一篇讲了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(-3)).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(2));
}

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

  using (DBContainer ctx = new DBContainer())
  {
        // EF Core 的写法
        var options = new MemoryCacheEntryOptions() { SlidingExpiration = TimeSpan.FromHours(2) };
        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追踪数据 有兴趣进阶和源码请点击跳转

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏NetCore

在Asp.Net Core中使用DI的方式使用Hangfire构建后台执行脚本

最近项目中需要用到后台Job,原有在Windows中我们会使用命令行程序结合计划任务或者直接生成Windows Service,现在.Net Core跨平台了,...

28750
来自专栏葡萄城控件技术团队

免费资源 | ActiveReports 报表控件发布多平台 Demo 代码集合

近期,ActiveReports 产品开发组的小伙伴针对大家比较关注的报表功能、常见问题、经典实现,特意准备了一个Demo代码集合,涉及WinFormss \ ...

27540
来自专栏日常工作总结

ASP.NET MVC中使用AJAX传参技巧

    一般情况下进行GET请求才会这么做,类似在浏览器的地址栏敲进去的url地址那样,客户端的js代码如下,这里对服务器端做了一个请求(这里用GET),请求通...

20120
来自专栏北京马哥教育

用 Python 搞定正方教务系统之抢课篇

最近学校开始选课,但是如果选课时间与自己的事情冲突,这时候就可以使用Python脚本自助抢课,抢课的第一步即是模拟登录,需要模拟登录后保存登录信息然后再进行操作...

71000
来自专栏智能大石头

魔方 NewLife.Cube

魔方 是一个基于 ASP.NET MVC 的 用户权限管理平台,可作为各种信息管理系统的基础框架。

12700
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统-关于WebApi的用法

我们新建的WebApi集成了微软自带的HelpPage,即Api的文档,在我们编写好接口之后会自动生成一份文档

15100
来自专栏算法修养

Lucene的索引系统和搜索过程分析

前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移。因为项目整体要迁移到ASP.NET Core ...

69630
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程

EF上下文 DbContext包含了DataBase属性,里面有很多方法,但是实际我们只需要用到个方法

15700
来自专栏FreeBuf

护卫神主机大师提权漏洞利用分析

护卫神·主机大师支持一键安装网站运行环境(IIS+ASP+ASP.net+PHP5.2-5.6+MySQL+FTP+伪静态+PhpMyAdmin),并可在线开设...

37500

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励