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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言qsort函数用法

    C语言qsort函数用法qsort函数简介   排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。看名字都知道快速排序是目前公认的一种比较好的排序算法。因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。这就是qsort函数(全称quicksort)。它是ANSIC标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)  功能:

    2022年6月23日
    23
  • Swoole和Swoft的那些事 (Http/Rpc服务篇)

    Swoole和Swoft的那些事 (Http/Rpc服务篇)

    2021年11月4日
    49
  • centos7 top命令_linux chmod命令

    centos7 top命令_linux chmod命令top命令Linuxtop命令用于实时显示process的动态。top参数详解第一行,任务队列信息**系统当前时间:**13:52:56**系统开机后到现在的总运行时间:**up66

    2022年7月28日
    7
  • CSS3-transition「建议收藏」

    CSS3-transition「建议收藏」1、transition代表css3中的过渡,可以使元素从一种样式逐渐改变为另一种的效果。2、transition:height2s;表示需要渐变的是元素高度height,渐变时间是2s。tra

    2022年7月4日
    14
  • 渗透测试工具包 | 开源安全测试工具 | 网络安全工具

    渗透测试工具包 | 开源安全测试工具 | 网络安全工具项目介绍记录渗透测试开源工具。自动化渗透测试 AttackSurfaceMapper-自动化渗透测试工具,使用手册/测试流程。 vajra-自动化渗透测试. Savior-渗透测试报告自动生成工具!. 漏洞利用框架 hackUtils-它是一个用于渗透测试和网络安全研究的黑客工具包,渗透以及web攻击脚本。 msf框架: pocsscan攻击框架 Pocsuite攻击框架 Beebeeto攻击框架 …

    2022年8月12日
    6
  • navicat 8.0 mysql 名、组织、注册码

    navicat 8.0 mysql 名、组织、注册码姓名(Name):www.9yifa.com组织(Organization):www.9yifa.com注册码(Serial):NAVJ-W56S-3YUU-MVHV

    2022年10月13日
    0

发表回复

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

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