linq 使用Entity Framework更新记录,而无需首先加载

qyuhtwio  于 2024-01-03  发布在  其他
关注(0)|答案(4)|浏览(143)

我正在寻找一种方法来编写代码与实体框架更新1000的记录,符合一个标准。
在SQL中,它看起来像这样

UPDATE [Items] 
SET [IsInSeason] = 1 
WHERE [Name] like '%summer%'

字符串
对于我来说,仅仅为了这次更新而将所有项目加载到内存中没有意义。
我想避免写常规的SQL语句(如果可能的话)

kognpnkq

kognpnkq1#

Entity Framework没有这种能力。你要么需要在更新之前加载实体,要么需要求助于原始SQL(作为一个ad-hoc语句,或者通过调用存储过程)。
有一些EF扩展包,然而,声称支持这种批量更新和批量删除场景。我没有任何个人经验,但给予他们看看:

3duebb1j

3duebb1j2#

要使用Entity Framework,我相信你必须将数据加载到内存中。否则你将如何给予你的语句?如果你真的不想将数据加载到内存中,让SQL Server处理它,你可以编写一个存储过程,从数据层调用它(如果你使用SQL Server)。

8iwquhpp

8iwquhpp3#

你可以得到所有的项目,并在循环中更新它们,如下所示:

(from x in dataBase.Items
         where x.Name.Contains("summer")
         select x).ToList().ForEach(xx => x.IsInSeason=1);

字符串
如果你使用实体框架,你应该得到所有的项目作为对象,做nessecar的变化,并保存它们。

qni6mghb

qni6mghb4#

答案从2023年开始,我们现在可以使用ExecuteUpdate()和ExecuteDelete(),它需要EF Core 7.0。你不需要循环或任何以前的读取。
https://learn.microsoft.com/en-us/ef/core/saving/execute-insert-update-delete

相关问题