是否有更高效的Entity Framework Core UpdateRange代码编写方式?
解决方案
你当前的写法需要先把匹配的客户数据查询加载到内存,遍历修改后再提交更新,全程涉及两次数据库交互+内存遍历开销,匹配数据量较大时效率确实偏低。可以按EF Core版本选择更高效的单语句实现方案:
- EF Core 7及以上版本(官方原生支持)
直接使用内置的ExecuteUpdate方法,无需提前查询加载实体,会直接生成对应的UPDATE SQL语句在数据库端执行,全程仅需一次数据库交互,性能提升非常明显:
context.Customer.Where(c => c.CustomerId == customerId) .ExecuteUpdate(setter => setter.SetProperty(cust => cust.isDeleted, true));
注意:ExecuteUpdate执行后会直接将改动提交到数据库,不需要额外调用SaveChanges方法。
2. EF Core 7以下版本
可以通过引入第三方EF扩展库实现批量更新能力,或是直接执行原生SQL语句完成操作:
// 原生SQL写法示例,适配所有EF版本 context.Database.ExecuteSqlInterpolated($"UPDATE Customer SET isDeleted = 1 WHERE CustomerId = {customerId}");
内容的提问来源于stack exchange,提问作者HABosch
相关产品推荐
相关产品推荐

