一次更新多个记录-EF +存储库

时间:2018-10-16 13:45:58

标签: asp.net-mvc entity-framework repository repository-pattern

我的代码-

public void SaveTagOrder(List<KeyValuePair<int, int>> result) {
        foreach(var item in result){
      var entity = _vpsdbContext.Tags.FirstOrDefault(e => e.TagId == item.Key);
            if (entity != null) { entity.SortOrder = item.Value; }
        }
        _vpsdbContext.SaveChanges();
    }

我只想一次更新多个记录。据我所知,我编写了这段代码,但它是一个接一个地添加的。请告诉我一次其他更新多个记录的方法。

1 个答案:

答案 0 :(得分:0)

从技术上讲没有问题。 EntityFramework Update的工作原理是这样的。

您可以进行一些更改以加快流程

选项1

AutoDetectChangesEnabled 设置为 False Please check this answer

 db.Tags
       .Where(x=>result.Contains(x.tagId))
       .ToList()
       .ForEach(a=>a.SortOrder = value);

 db.SaveChanges();

选项2

您可以尝试 EntityFramework 插件进行批量操作,here

以下是本文稍后的“性能”部分的一小部分摘录。

Batch iteration with 25000 entities
Insert entities: 880ms
Update all entities with a: 189ms
Bulk update all with a random read: 153ms
delete all entities with a: 17ms
delete all entities: 282ms

Standard iteration with 25000 entities
Insert entities: 8599ms
Update all entities with a: 360ms
Update all with a random read: 5779ms
delete all entities with a: 254ms
delete all entities: 5634ms