如何在Entity Framework Core 6中使用C#实现SQL批量插入?
Entity Framework Core 6的批量插入支持及优化方案
EF Core 6原生没有提供专门的批量插入API,但可以通过优化代码实现高效的批量插入,避免你当前代码里的性能问题。
现有代码的问题
你现在的写法是在循环里每添加一条数据就调用一次SaveChangesAsync,这会导致多次数据库往返,数据量越大性能越差,完全没必要这么做。
优化方案
1. 批量添加后单次提交(原生EF Core 6支持)
把所有实体添加到上下文后,只调用一次SaveChangesAsync,EF Core会一次性生成多条INSERT语句提交到数据库,大幅减少数据库交互次数:
public async Task<List<Application>> InsertApplicationAsync(List<Application> applications) { foreach (var app in applications) { var application = new Application(); application.Id = Id; // 注意:如果Id是数据库自增列,无需手动赋值,根据你的实体配置调整 application.Identifier = Identifier; await _context.AddAsync(application); } await _context.SaveChangesAsync(); return applications; }
这种方式虽然不是生成单条批量INSERT语句,但已经比循环提交高效很多。
2. 使用第三方库实现真正的单条批量插入
如果需要生成INSERT INTO ... VALUES (...), (...), (...)这种原生批量插入语句,可以使用第三方扩展库(比如EFCore.BulkExtensions),这类库能直接生成高效的批量插入SQL,性能比原生批量提交更优,但不属于EF Core 6原生功能。
另外补充:EF Core 7及后续版本新增了ExecuteUpdate和ExecuteDelete的批量更新/删除API,但批量插入依然没有原生支持,还是需要用上述方案。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

