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

Posted 一菜菜一群

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Entity Framework Extended Library (EF扩展类库,支持批量更新删除合并多个查询等)相关的知识,希望对你有一定的参考价值。

转:http://www.cnblogs.com/jinzhao/archive/2013/05/31/3108755.html

 

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

也可以在nuget上直接安装这个包,最新版本已经改用对IQueryable<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();

 

批量更新

//批量更新用户名中包含大写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();

 

 学习学习~~

以上是关于Entity Framework Extended Library (EF扩展类库,支持批量更新删除合并多个查询等)的主要内容,如果未能解决你的问题,请参考以下文章

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

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

MVC5 Entity Framework学习之Entity Framework高级功能

Entity Framework 学习系列 - 认识理解Entity Framework

Entity Framework Code-First(23):Entity Framework Power Tools

Entity Framework怎么GroupBY多个字段