上一篇讲了 EF 直接执行 SQL 与存储过程的用 法
这次我们来看 EntityFramework-Plus(免费开源) 库的用法相比其他扩展库, 这个更加新并且用法更加简单
这是一个对 Entity Framework 进行扩展的类库. 支持 EF EF5, EF6, EF Core, 来弥补 EF 目前的短板
GitHub 地址 https://github.com/zzzprojects/EntityFramework-Plus
支持功能:
批量删除
批量更新
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 追踪数据
有兴趣进阶和源码请点击跳转 https://github.com/zzzprojects/EntityFramework-Plus
来源: https://www.cnblogs.com/ymnets/p/8797055.html