Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)…

Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)…

今天乍一看,园子里居然没有关于这个类库的文章,实在是意外毕竟已经有很多介绍EF使用的文章了。

E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended

也可以在nuget上直接安装这个包,它的说明有点过时了,最新版本已经改用对IQueryable<T>的扩展,而不是DbSet<T>(已经标记为弃用),所以跟我一样有隔离癖好的就可以大胆使用了。下面介绍如何批量删除、更新、查询。

批量删除

本来我们需要这样删除

?
//EF原生的删除需要先取出entity然后remove
context.Remove(context.Users.First(u=>u.Key==xxx);
//如果要删除更多
foreach
(var user
in
 
context.Users.Where(u => u.FirstName ==
"firstname"
).ToList())
{
context.Remove(user);
}

本来一句sql可以解决的问题,变得复杂了。

 使用ORM是为了跟sql尽量的解耦,并且能在编译时检查出更多的错误,但是上面的写法让人堵的慌,如果你也有这种感觉下面的写法是不是就是你脑子里想要的东西呢。


----引用EF Extend Libary后删除只需要一次就完成了,效率高了很多,也不需要太多的连接资源,使用更方便了
?
//delete all users where FirstName matches
context.Users.Delete(u => u.FirstName ==
"firstname"
);
//当然如果我这样写也可以
context.Users.Where(...).Delete();

当第一次看到EF EL的时候就被这种写法吸引住了,这不就是我们一直找的东西么。

批量更新

?
//批量更新用户名中包含大写J的用户设置工资为999
context.Users.Update(
    
u => u.Name.Contans(
"J"
),
    
u2 =>
new
 
User {Salary = 999});
 
//第一个参数也可以传入已经有的IQuaryable的参数如下
var users = context.Users.Where(u => u.FirstName ==
"firstname"
);
context.Users.Update(users, u =>
new
 
User {FirstName =
"newfirstname"
});<br><br>
//当然了我最喜欢的还是这样的写法<br>context.Users.Where(u => u.FirstName == "firstname").Update(u=>new User{FirstName = "newfirstname"})

  是不是更喜欢这个扩展库了?我是爱不释手了,可惜现在才开始用。

 批量查询

 其实现在的查询已经很棒了,默认的延迟查询都能满足基本需求,但是有时候总希望更极致一点,比如现有的查询无法满足分页这个顽固的需求。

?
//看看EF EL怎么解决
// 复用的查询
var q = db.Tasks.Where(t => t.Priority == 2);
// 获取总数
var q1 = q.FutureCount();
// 获取分页的数据
var q2 = q.Skip(pageIndex).Take(pageSize).Future();
 
// 这里会触发上面所有Future函数中的查询包装到一个连接中执行
int
 
total = q1.Value;
//因为已经得到结果了,这里不会再次查询
var tasks = q2.ToList();

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110106.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【用户画像】从0到1掌握用户画像知识体系

    【用户画像】从0到1掌握用户画像知识体系一、初始用户画像1.1用户画像随着用户的一切行为数据可以被企业追踪到,企业的关注点日益聚焦在如何利用大数据为经营分析和精准营销服务,而要做精细化运营,首先要建立本企业的用户画像。提到用户画像的概念,我们区分下用户角色(Persona)和用户画像(Profile):1.1.1用户角色用户角色本质是一个用以沟通的工具,当我们讨论产品、需求、场景、用户体验的时候,为了避免在目标用户理解上的分歧,用户角色应运而生。用户角色建立在对真实用户深刻理解,及高精准相关数据的概括之上,虚构的包含典型用

    2022年5月25日
  • 对于三极管饱和状态的理解「建议收藏」

    对于三极管饱和状态的理解「建议收藏」对于三极管饱和状态的理解https://zhidao.baidu.com/question/172715750.html问题来源对于三极管饱和状态的理解三极管如工作在饱和状态也就是开的状态,那么就是双结正偏这是书上的解释我自己的理解是这样的:饱和状态和从放大状态转变过来的,极电结和发射结正偏是结果,而不是原因就是说,三极管首先工作在放大状态,极电结反偏,发射结正偏当基级电流增大时,一直增大到三极管的非线性区(这里指的是饱和区),注意,在这一瞬间偏置情况并未改变,也就是说依然是极电结反偏,

    2022年9月11日
  • mysql 加入�列,改动列,删除列。

    mysql 加入�列,改动列,删除列。

    2021年12月2日
  • C语言游戏 双缓存解决闪屏问题 详细总结[通俗易懂]

    最近,应学校课程要求,要完成一个C语言课程设计。可以是写一个小游戏,或是写管理系统等。所以,准备做一个改版贪吃蛇:消灭小虫虫(瞎起的名字:D)。之前学过Java,所以学C语言也就比较顺利。而在刚学完C语言刚着手准备做C语言的小游戏时,却发现了一个问题——闪屏。(我在网上查找了很多关于双缓存,有关的解答很少,更少能够让一个完全不了解的小白一个明白的解释。下面我想和大家分享我使用…

    2022年4月10日
  • 声源定位「建议收藏」

    声源定位「建议收藏」声源定位一.简介 声音定位是人们感知周围事物的一个重要部分。即使看不到那里有什么,我们也可以根据声音大致判断出我们周围有什么。尝试在电子设备中复制相同的系统可以证明是一种有价值的方式来感知机器人、安全和一系列其他应用的环境。我们构造了一个三角形排列的麦克风来定位任意声音的方向。通过记录来自三个麦克风的输入,我们可以将记录相互关联,以识别音频记录之间的时间延迟。因为三个麦克风的物理位置是已知的,…

    2022年4月19日
  • 微信公众号平台开发教程_微信公众号制作教程

    微信公众号平台开发教程_微信公众号制作教程关键字:微信公众平台开发入门作者:贝创工作室原文:http://www.cnblogs.com/imaker/p/5491433.html背景知识:微信公众平台的开发需要有一定的PHP基础知识,PHP是一种HTML内嵌式的语言,广泛用于网站开发。微信服务器和开发者的服务器间有两种数据传输方式,分别是XML和JSON。其中XML主要用在接受发送普通消息和事件推送…

    2022年11月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号