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(); |
-------------------------------------------------------------------------------------------------------------------------------------------------
编辑于20160607
有段时间没用csharp了,上面写的是刚用efe时的笔记,一直没有回复大家很抱歉。
- efe不支持mysql;
- 不建议吞吐大的用ef,如果吞吐大的业务有限的话可以独立出来做;
作者:today4king
出处:https://www.cnblogs.com/jinzhao/archive/2013/05/31/3108755.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2011-05-31 VSSpeedster - Speed up your VS 2010
2009-05-31 Cookie 二级域名设置