此次咱们来看 EntityFramework-Plus(免费开源) 库的用法相比其余扩展库,这个更加新而且用法更加简单git
这是一个对Entity Framework进行扩展的类库.支持EF EF5, EF6, EF Core,来弥补EF目前的短板github
代码下载地址数据库
固然你要选择你对应的版本,而且同时你也安装了对应版本的EF版本(我选择EF6的扩展,那么我应该也对应现有的EF6)缓存
安装nuget包以后咱们会发现咱们平时惯用的linq表达式多了一些智能提示spa
好吧确实很简单,删除颜色是blue条件的全部数据code
using (DBContainer ctx = new DBContainer()) { ctx.Spl_Product.Where(a => a.Color == "blue").Delete(); }
批量更新建立日期3天之前的数据,让color=red,code=xxxxhtm
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"}); }
在从缓存查询以前,咱们必须引用 System.Runtime.Caching来支持系统缓存(并且能够设置缓存的时间)blog
下面来看怎么设置缓存:get
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); }
using (DBContainer ctx = new DBContainer()) { //从缓存中查询,若是没有缓存即从数据库查询 var list3 = ctx.Spl_Product.Where(x => x.Code=="red").FromCache("list"); }
注意:.FromCache("list"); list 是第四点设置的缓存
using (DBContainer ctx = new DBContainer()) { //清空缓存 QueryCacheManager.ExpireTag(new string[] { "list", "list2" }); }
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
下面来讲最后一点,这一点比较有趣的,全局过滤,咱们有时实际也是很须要用到的。那么在何时用下面先来看语句
//建立全局过滤 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追踪数据
有兴趣进阶和源码请点击跳转