批量操作
2021-11-3 大约 1 分钟
# 批处理
批处理时我们程序在运行时常用的技术,用于在大数据量时的高效性和便捷性
# efcore批量处理生态
efcore有着许许多多的批处理生态,目前我们熟知的有Z.EntityFramework.Plus.EFCore
(opens new window)还有EFCore.BulkExtensions
(opens new window)等等一些列的,虽然各个框架五花八门但是在支持方面sharding-cor
e表示我都支持
# 使用
var list = new List<SysUserMod>();
///通过集合返回出对应的k-v归集通过事务开启
var dbContexts = _defaultTableDbContext.BulkShardingEnumerable(list);
//var dbContexts = _defaultTableDbContext.BulkShardingTableEnumerable(list); //if only sharding table
foreach (var dataSourceMap in dbContexts)
{
foreach (var tailMap in dataSourceMap.Value)
{
tailMap.Key.BulkInsert(tailMap.Value.ToList());
//tailMap.Key.BulkDelete(tailMap.Value.ToList());
//tailMap.Key.BulkUpdate(tailMap.Value.ToList());
}
}
_defaultTableDbContext.SaveChanges();
//or
var dbContexts = _defaultTableDbContext.BulkShardingEnumerable(list);
//var dbContexts = _defaultTableDbContext.BulkShardingTableEnumerable(list); //if only sharding table
using (var tran = _defaultTableDbContext.Database.BeginTransaction())
{
foreach (var dataSourceMap in dbContexts)
{
foreach (var tailMap in dataSourceMap.Value)
{
tailMap.Key.BulkInsert(tailMap.Value.ToList());
//tailMap.Key.BulkDelete(tailMap.Value.ToList());
//tailMap.Key.BulkUpdate(tailMap.Value.ToList());
}
}
_defaultTableDbContext.SaveChanges();
tran.Commit();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
sharding_core
会将本次的所有对象都进行分组对应自己的数据源和自己的所在dbcontext内
如果你是按表达式来进行分表的话
var dbContexts = _defaultTableDbContext.BulkShardingExpression(o=>o.id=="123");
var dbContexts = _defaultTableDbContext.BulkShardingTableExpression(o=>o.id=="123"); //if only sharding table
1
2
3
4
2
3
4