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时的笔记,一直没有回复大家很抱歉。

  1. efe不支持mysql;
  2. 不建议吞吐大的用ef,如果吞吐大的业务有限的话可以独立出来做;
时间: 2024-09-28 00:48:46

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

Entity Framework Extended Library

扩展了实体框架的功能类库. https://github.com/loresoft/EntityFramework.Extended 1批量更新/删除 1)删除 //delete all users where FirstName matches context.Users.Delete(u => u.FirstName == "firstname"); 2)更新 //update all tasks with status of 1 to status of 2 context

EF 批量更新/删除数据

在网上找了很久,得到的答案是"Entity Framework 中不能同时更新多条记录",历经这么多版本,居然还没有这种基本功能,我真的很无语了.还要先查询出来,然后再对实体更新或删除,那效率可想而知了-- 在网上找了找解决方案,比如说这个 EF架构~性能高效的批量操作(Update篇) 感觉在剑走偏锋,里面实际是在拼Sql(当然EF最终也是拼SQL),我却不喜欢这么干,完全没有Linq的感觉,也很别扭. 最后又找到个开源库,又是老外解决的 Entity Framework Exten

Entity Framework Code First ---EF Power Tool MySql

关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里不再啰嗦. MySql里有个默认的范例数据库 world, 里面有三个表, 下载Entity Framework Power Tools 安装包, 现在已经是Beta3版本,http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9

Entity Framework学习笔记——EF简介(一篇文章告诉你什么是EF)

Entity Framework是以ADO.NET为基础,面向数据的"实体框架".以下简称EF. 它利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问. 个人认为百科上对EF一句比较经典的解释为:让上层的应用程序码可以如面向对象的方式般访问数据. 过去我们对数据库都是直接

Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题

关于如何使用EF Power Tool的介绍请看 http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/EFPowerTool_1.html, 这里不再啰嗦. MySql里有个默认的范例数据库 world, 里面有三个表, 下载Entity Framework Power Tools 安装包, 现在已经是Beta3版本,http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9

Entity Framework 6.0 对枚举的支持/实体添加后会有主键反回

实验 直接上代码,看结果 实体类 [Flags] public enum FlagsEnum { Day = 1, Night = 2 } public class EntityWithEnum { public int ID { get; set; } public FlagsEnum ValidTime { get; set; } } 数据库上下文 public partial class CodeFirstModel : DbContext { public CodeFirstModel(

mvc+entity framework database first,生成的model每次更新一个表会更新所有的model

在使用Entity Framework 的Database frist或model first时,直接加attribute到modle类上是太现实也不合理的,因为model类是自动生成的,重新生成后会覆盖自己的修改.一个比较合理 做法,就是用 partial class的方式来实现. 比如有一个Model类: Movie.那我们就可以添加一个局部类文件,局部类的内容如下: using System.ComponentModel.DataAnnotations; namespace Movies.

Entity Framework 6 Recipes 2nd Edition(13-6)译 -&gt; 自动编译的LINQ查询

问题 你想为多次用到的查询提高性能,而且你不想添加额外的编码或配置. 解决方案 假设你有如Figure 13-8 所示的模型 Figure 13-8. A model with an Associate and its related Paycheck 在这个模型里,每个Associate(同事)有0到多个Paychecks(薪水),你有一个LINQ查询,它在你的整个应用程序中重复使用,你想仅编译一次,然后复用这个已编译的版本,通过这种方式来提高这个查询性能. 当针对数据库执行时,EF必须把你的

springboot集成druid连接池不支持批量更新

原因:Druid的防火墙配置(WallConfig)中变量multiStatementAllow默认为false: 解决方案:设置Druid的防火墙配置(WallConfig)中变量multiStatementAllow=true,新建DruidDataSource配置类 配置类代码: @Configuration public class DataSourceConfig { @Autowired WallFilter wallFilter; @Bean //声明其为Bean实例 @Prima