批量更新/删除EF5

Fra*_*ank 41 entity-framework batch-processing entity-framework-5

使用(实体框架)EF5处理批量更新的最佳方法是什么?我有两个我感兴趣的特殊情况:

  1. 更新一个字段(例如UpdateDate)以获取100到100.000 Id之间的列表(List),这是主键.分别调用每个更新似乎需要很多开销并且需要很长时间.

  2. 在单个go中插入多个,也在100到100.000之间的相同对象(例如用户).

有什么好建议吗?

Lad*_*nka 36

  1. 有两个开源项目允许这样:EntityFramework.ExtendedEntity Framework Extensions.您还可以在EF的codeplex站点上查看有关批量更新的讨论.
  2. 通过EF插入100k记录是第一个错误的应用程序架构.您应该为数据导入选择不同的轻量级技术.即使EF拥有如此大的记录集的内部操作也会花费大量的处理时间.目前还没有针对EF的批量插入解决方案,但在EF的代码plex网站上有关于此功能的广泛讨论.


Ale*_*aus 21

我看到以下选项:

1.最简单的方法 - 手动创建SQL请求并通过ObjectContext.ExecuteStoreCommand执行

context.ExecuteStoreCommand("UPDATE TABLE SET FIELD1 = {0} WHERE FIELD2 = {1}", value1, value2);
Run Code Online (Sandbox Code Playgroud)

2.使用EntityFramework.Extended

context.Tasks.Update(
    t => t.StatusId == 1, 
    t => new Task {StatusId = 2});
Run Code Online (Sandbox Code Playgroud)

3.为EF制作自己的扩展程序.有一篇文章Bulk Delete,通过继承ObjectContext类实现了这个目标.值得一看.批量插入/更新可以以相同的方式实现.