如何使用Entity Framework批量更新整张表指定列的所有值为1
错误原因
你使用的context.Customer.Add(x => x.Doneflag = 1)是完全错误的用法,Add是Entity Framework中用于新增数据的API,和更新操作没有任何关联,因此不会生效。
正确实现方案
方案1:EF Core 7.0+ 内置批量更新(推荐)
EF Core 7.0及以上版本已经原生支持批量更新操作,不需要提前把数据加载到内存,会直接生成和原生MySQL语句效率一致的单条UPDATE指令,代码如下:
// 直接对Customer表所有行执行批量更新,将Doneflag设为1 context.Customer.ExecuteUpdate(update => update.SetProperty(c => c.Doneflag, 1));
方案2:低版本EF 原生实现
如果使用的是EF 6或者低于7.0的EF Core版本,可以先查询所有数据,遍历赋值后提交:
// 查询所有Customer记录加载到内存 var allCustomers = context.Customer.ToList(); // 遍历修改每条记录的Doneflag字段 foreach (var customer in allCustomers) { customer.Doneflag = 1; } // 提交所有更改到数据库 context.SaveChanges();
注意:该方案需要将全表数据加载到内存,数据量较大时性能较差,底层会生成多条单条UPDATE语句执行
方案3:直接执行原生SQL
如果追求最高性能,也可以直接通过EF执行原生更新语句:
context.Database.ExecuteSqlRaw("UPDATE Customer SET doneflag = 1");
内容的提问来源于stack exchange,提问作者Tumo Maraisane
相关产品推荐
相关产品推荐

