zoukankan      html  css  js  c++  java
  • 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追踪数据

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

  • 相关阅读:
    【WP开发】记录屏幕操作
    【.NET深呼吸】清理对象引用,有一个问题容易被忽略
    【WP开发】JSON数据的读与写
    【WP8.1开发】RenderTargetBitmap类的特殊用途
    【WP 8.1开发】How to 图像处理
    【WP8.1开发】用手机来控制电脑的多媒体播放
    【WP 8.1开发】如何动态生成Gif动画
    【WP8.1开发】基于应用的联系人存储
    使用awk处理文本
    PHP数组和字符串的处理函数汇总
  • 原文地址:https://www.cnblogs.com/ymnets/p/9176620.html
Copyright © 2011-2022 走看看