【发布时间】:2017-05-26 06:18:19
【问题描述】:
我正在尝试使用实体框架批量更新记录。我试过 Entity Framework.Extensions Update 方法。
Update 方法能够批量更新具有相同更新值集的记录集。
例子:
Id - Quantity
Record 1 - A - 10
Record 2 - B - 20
Record 3 - C - 30
我们可以通过简单的调用批量更新以上所有记录
Records.Update(new => Record { Quantity = 100 });
如何使用Entityframework.Extensions或任何其他方法批量更新不同数量的每条记录,从而更快地完成批量更新?
【问题讨论】:
-
用单独的数据更新每条记录意味着每条记录一个语句。最快的方法是在单个事务中执行所有语句,但这需要一些时间。您现在如何进行更新过程?
-
目前我们正在使用实体框架,循环遍历每条记录更新数据库实体属性然后保存更改,此过程将针对所有50,000条记录执行,这需要更多时间。
-
那么问题是更新的值来自哪里?他们来自另一张桌子吗?还是它们是原始值的函数(例如 2x)?每一行可以有不同的值,还是可以使用 EF 扩展更新行组?
-
在 UI 处理数据并发送到服务进行更新后,记录才会出现,是的,每一行都可以有不同的值。尝试了 EF-Extended,但我能够更新具有相同值的记录组,但不能以批量格式更新具有不同值的每条记录。
-
如果值来自 UI,那么您的实体是未附加的。所以基本上每条记录都会被选中然后更新,这肯定会大大减慢速度。 @GrégoryBourgin 的答案可能能够在不引入另一个库的情况下解决这个问题。由于每一行都需要不同的值,您将需要单独的更新语句 - 但如果您在修改每个手动附加的记录后调用
SaveChanges,那么您应该获得批量更新并且没有数据往返。
标签: c# entity-framework linq bulkupdate entity-framework-extended