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

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

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

支持功能:

批量删除

批量更新

Linq表达式

从缓存查询

延迟加载

过滤查询

组合查询功能

1.从NUGET安装组件就OK

4f4406eeee4346add081f477a6fa204a.png

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

2.操作(批量删除)

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

e1ffa1d6438b54ab857a094457752a1c.png

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

using (DBContainer ctx = newDBContainer())

{

ctx.Spl_Product.Where(a=> a.Color == "blue").Delete();

}

3.操作(批量更新)

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

using (DBContainer ctx = newDBContainer())

{

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 = newDBContainer())

{//查询数据之后并进行缓存

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 = newDBContainer())

{//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 = newDBContainer())

{//从缓存中查询,如果没有缓存即从数据库查询

var list3 = ctx.Spl_Product.Where(x => x.Code=="red").FromCache("list");

}

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

6.清空缓存

using (DBContainer ctx = newDBContainer())

{//清空缓存

QueryCacheManager.ExpireTag(new string[] { "list", "list2"});

}

7.延迟加载

using (DBContainer ctx = newDBContainer())

{//没有使用缓存和延迟加载的写法

var count =ctx.Spl_Product.Count();//使用缓存

ctx.Spl_Product.DeferredCount().FromCache();//延迟查询

ctx.Spl_Product.DeferredCount().FutureValue();

}

似乎上面的七点,看起来使用方式都非常简单易懂,扩展自EF当然只是需要在后面.一下就出来,只需要记得Delete,Update,FromCaChe

下面来说最后一点,这一点比较有趣的,全局过滤,我们有时实际也是很需要用到的。那么在什么时候用下面先来看语句

8.过滤查询

//创建全局过滤

QueryFilterManager.Filter(x => x.Where(c => c.IsDel==false));

DBContainer ctx= newDBContainer();//让过滤生效

QueryFilterManager.InitilizeGlobalFilter(ctx);//以后的使用//SELECT * FROM Spl_Product WHERE IsDel = true

var customer = ctx.Spl_Product.ToList();

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值