9.8、批量增删改操作

批量操作也算比较常见的功能,通常性能是最大考虑因素。

在 Hoa Framework 框架中,默认集成了高性能且易用的第三方包:EFCore.BulkExtensions。使用极其简单,且是微软推荐的EF Core 批量操作库

常见示例

// 批量插入
_testRepository.Context.BulkInsert(entitiesList);                   
_testRepository.Context.BulkInsertAsync(entitiesList);

// 批量更新
_testRepository.Context.BulkUpdate(entitiesList);                   
_testRepository.Context.BulkUpdateAsync(entitiesList);

// 批量删除
_testRepository.Context.BulkDelete(entitiesList);                   
_testRepository.Context.BulkDeleteAsync(entitiesList);

// 批量插入或更新
_testRepository.Context.BulkInsertOrUpdate(entitiesList);           
_testRepository.Context.BulkInsertOrUpdateAsync(entitiesList);

// 批量插入或更新或删除
_testRepository.Context.BulkInsertOrUpdateOrDelete(entitiesList);   
_testRepository.Context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);

// 批量读取多个实体
_testRepository.Context.BulkRead(entitiesList);                     
_testRepository.Context.BulkReadAsync(entitiesList);

// 批量清空表(慎用!!!!!)
_testRepository.Context.Truncate<Entity>();                         
_testRepository.Context.TruncateAsync<Entity>();

链式查询批量操作

// 根据条件批量删除
_testRepository.Entity.Where(a => a.ItemId >  500).BatchDelete();
_testRepository.Context.Items.Where(a => a.ItemId >  500).BatchDeleteAsync();

// 根据条件批量更新
_testRepository.Entity.Where(a => a.ItemId <= 500).BatchUpdate(a => new Item { Quantity = a.Quantity + 100 });
_testRepository.Entity.Where(a => a.ItemId <= 500).BatchUpdate(new Item { Description = "Updated" });
_testRepository.Entity.Where(a => a.ItemId <= 500).BatchUpdateAsync(new Item { Description = "Updated" });

// 批量更新指定列
var updateColumns = new List<string> { nameof(Item.Quantity) };
var q = _testRepository.Entity.Where(a => a.ItemId <= 500);
int affected = q.BatchUpdate(new Item { Description = "Updated" }, updateColumns);

更多批量操作可查看官方文档

最后更新于