我正在寻找一种方法来编写代码与实体框架更新1000的记录,符合一个标准。在SQL中,它看起来像这样
UPDATE [Items] SET [IsInSeason] = 1 WHERE [Name] like '%summer%'
字符串对于我来说,仅仅为了这次更新而将所有项目加载到内存中没有意义。我想避免写常规的SQL语句(如果可能的话)
kognpnkq1#
Entity Framework没有这种能力。你要么需要在更新之前加载实体,要么需要求助于原始SQL(作为一个ad-hoc语句,或者通过调用存储过程)。有一些EF扩展包,然而,声称支持这种批量更新和批量删除场景。我没有任何个人经验,但给予他们看看:
3duebb1j2#
要使用Entity Framework,我相信你必须将数据加载到内存中。否则你将如何给予你的语句?如果你真的不想将数据加载到内存中,让SQL Server处理它,你可以编写一个存储过程,从数据层调用它(如果你使用SQL Server)。
8iwquhpp3#
你可以得到所有的项目,并在循环中更新它们,如下所示:
(from x in dataBase.Items where x.Name.Contains("summer") select x).ToList().ForEach(xx => x.IsInSeason=1);
字符串如果你使用实体框架,你应该得到所有的项目作为对象,做nessecar的变化,并保存它们。
qni6mghb4#
答案从2023年开始,我们现在可以使用ExecuteUpdate()和ExecuteDelete(),它需要EF Core 7.0。你不需要循环或任何以前的读取。https://learn.microsoft.com/en-us/ef/core/saving/execute-insert-update-delete
4条答案
按热度按时间kognpnkq1#
Entity Framework没有这种能力。你要么需要在更新之前加载实体,要么需要求助于原始SQL(作为一个ad-hoc语句,或者通过调用存储过程)。
有一些EF扩展包,然而,声称支持这种批量更新和批量删除场景。我没有任何个人经验,但给予他们看看:
3duebb1j2#
要使用Entity Framework,我相信你必须将数据加载到内存中。否则你将如何给予你的语句?如果你真的不想将数据加载到内存中,让SQL Server处理它,你可以编写一个存储过程,从数据层调用它(如果你使用SQL Server)。
8iwquhpp3#
你可以得到所有的项目,并在循环中更新它们,如下所示:
字符串
如果你使用实体框架,你应该得到所有的项目作为对象,做nessecar的变化,并保存它们。
qni6mghb4#
答案从2023年开始,我们现在可以使用ExecuteUpdate()和ExecuteDelete(),它需要EF Core 7.0。你不需要循环或任何以前的读取。
https://learn.microsoft.com/en-us/ef/core/saving/execute-insert-update-delete