在使用 Entity Framework Core(简称 EF Core)进行数据库操作时,很多初学者会直接使用 SaveChanges() 方法逐条插入或更新数据。这种方式在处理少量数据时尚可接受,但一旦面对成百上千甚至上万条记录,性能问题就会迅速暴露出来。本文将手把手教你如何对 EF Core 批量操作 进行性能优化,让你的 C# 应用程序在处理大量数据时依然保持高效流畅。
当你调用 context.Add(entity) 并随后调用 SaveChanges() 时,EF Core 默认会对每一条记录生成一个独立的 SQL 语句并执行一次数据库往返(round-trip)。例如,插入 1000 条数据,就会产生 1000 次数据库请求,这不仅浪费网络资源,还大大增加了数据库负载。
虽然 AddRange 本身不会减少 SQL 语句数量,但它可以避免多次调用 Add 带来的上下文状态跟踪开销。结合一次 SaveChanges() 调用,能略微提升性能:
var entities = new List<Product>();for (int i = 0; i < 1000; i++){ entities.Add(new Product { Name = $"Product{i}", Price = i * 10 });}context.AddRange(entities);context.SaveChanges(); // 仍会生成1000条INSERT语句 注意:此方法仍会生成 N 条 INSERT 语句,只是减少了 C# 层面的开销,并未真正解决数据库层面的性能瓶颈。
从 EF Core 7 开始,官方原生支持 批量插入(Bulk Insert) 功能!只需在配置中启用即可:
// 在 DbContext 的 OnConfiguring 中启用protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){ optionsBuilder.UseSqlServer( connectionString, options => options.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery) );}// 使用批量插入(EF Core 7+)await context.BulkInsertAsync(entities); ⚠️ 注意:截至 EF Core 8,BulkInsertAsync 仍是预览功能,需安装额外的 NuGet 包(如 Microsoft.EntityFrameworkCore.SqlServer 最新版)并确认数据库提供程序是否支持。
如果你使用的是 EF Core 6 或更早版本,或者希望获得更强大的批量操作能力(如批量更新、删除),推荐使用成熟的第三方库,例如 EFCore.BulkExtensions。
1. 安装 NuGet 包:
Install-Package EFCore.BulkExtensions 2. 使用示例:
using EFCore.BulkExtensions;var entities = GenerateProducts(10000);// 批量插入(一条SQL语句完成)context.BulkInsert(entities);// 批量更新context.BulkUpdate(entities);// 批量删除context.BulkDelete(entities); 该库底层使用 SqlBulkCopy(SQL Server)或等效技术,性能提升可达 10~100 倍,是生产环境中的首选方案。
| 方法 | 10,000 条插入耗时 |
|---|---|
| Add + SaveChanges | 约 45 秒 |
| AddRange + SaveChanges | 约 40 秒 |
| EFCore.BulkExtensions | 约 0.8 秒 |
- 对于小量数据(<100 条),使用原生 AddRange + SaveChanges 即可;
- 对于中大型数据集(>1000 条),强烈建议使用 EFCore.BulkExtensions 实现真正的 C#批量插入 和 Entity Framework Core高效写入;
- 若使用 EF Core 7/8,可尝试官方批量 API,但需关注兼容性和稳定性。
通过合理应用上述技巧,你可以显著提升应用程序的数据处理能力,实现真正的 EF Core性能优化。赶快在你的项目中试试吧!
© 2024 C# 开发者指南 | 专注 .NET 与 EF Core 实战技巧
本文由主机测评网于2025-12-24发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251212085.html