基于efcore的分表组件开源 (3)

批量操作将对应的dbcontext和数据进行分离由用户自己选择第三方框架比如zzz进行批量操作或者batchextension

virtualDbContext.BulkInsert<SysUserMod>(new List<SysUserMod>()) .BatchGroups.ForEach(pair => { ///zzz or other pair.Key.BlukInsert(pair.Value); }); var shardingBatchUpdateEntry = virtualDbContext.BulkUpdate<SysUserMod>(o => o.Id == "1", o => new SysUserMod() { Name = "name_01" }); shardingBatchUpdateEntry.DbContexts.ForEach(context => { //zzz or other context.Where(shardingBatchUpdateEntry.Where).Update(shardingBatchUpdateEntry.UpdateExp); }); 手动路由 var shardingQueryable = _virtualDbContext.Set<SysUserMod>().AsSharding(); //禁用自动路由 shardingQueryable.DisableAutoRouteParse(); //添加路由直接查询尾巴0的表 shardingQueryable.AddManualRoute<SysUserMod>("0"); //添加路由针对该条件的路由 shardingQueryable.AddManualRoute<SysUserMod>(o=>o.Id=="100"); var list=await shardingQueryable.ToListAsync(); 自动建表

参考

事务

默认savechanges支持事务如果需要where.update需要手动开启事务

_virtualDbContext.BeginTransaction(); var shardingBatchUpdateEntry = _virtualDbContext.BulkUpdate<SysUserMod>(o=>o.Id=="123",o=>new SysUserMod() { Name = "name_modify" }); foreach (var dbContext in shardingBatchUpdateEntry.DbContexts) { //zzz or other batch } await _virtualDbContext.SaveChangesAsync(); 注意事项

该库的IVirtualDbContext.Set使用asnotracking所以基本不支持跟踪,目前框架采用AppDomain.CurrentDomain.GetAssemblies();
可能会导致程序集未被加载所以尽可能在api层加载所需要的dll

计划

[提供官网如果该项目比较成功的话]

[开发更完善的文档]

[支持分库]

[支持更多数据库查询]

最后

理论上该库的思想可以解决大部分orm的分表,目前是仅针对efcore的后期如果可以获取也会对其他orm进行sharding库的开发
该框架借鉴了大部分分表组件的思路,目前提供的接口都已经实现,并且支持跨表查询,基于分页查询该框架也使用了流式查询保证不会再skip大数据的时候内存会爆炸,至于groupby目前已经在开发支持了,相信不久后就会发布新版本,目前这个库只是一个刚刚成型的库还有很多不完善的地方希望大家多多包涵,如果喜欢的话也希望大家给个star.
该文档是我晚上赶工赶出来的也想趁热打铁希望更多的人关注,也希望更多的人可以交流。

凭借各大开源生态圈提供的优秀代码和思路才有的这个框架,希望可以为.Net生态提供一份微薄之力,该框架本人会一直长期维护,有大神技术支持可以联系下方方式欢迎star

分类:

技术点:

相关文章:

开源基于docker的任务调度器pipeline,比`quartzs` 更强大的分布式任务调度器 2021-07-31

开源低代码平台开发实践二:从 0 构建一个基于 ER 图的低代码后端 2021-07-31

三分钟入门 InnoDB 存储引擎中的表锁和行锁 2021-07-26

分库分表的那些事 2021-07-22

进来偷学一招,数据归档二三事儿 安卓手机改造服务器——基本环境配置(CentOS7 arm32) 对抗样本综述(一) 海量数据Excel报表利器——EasyExcel(一 利用反射机制导出Excel) 《面试补习》-熔断降级我学会了! 完了,又火一个项目 Vue 两个字段联合校验典型例子--修改密码 ES2021 新特性! (数据科学学习手札124)pandas 1.3版本主要更新内容一览 动态规划_备忘录法_矩阵链乘问题 最新的.NET 热重载介绍 基于uni-app全端弹框组件uaPopup「兼容h 2021-07-10

安卓手机改造服务器——基本环境配置(CentOS7 arm32) 对抗样本综述(一) 海量数据Excel报表利器——EasyExcel(一 利用反射机制导出Excel) 《面试补习》-熔断降级我学会了! 完了,又火一个项目 Vue 两个字段联合校验典型例子--修改密码 ES2021 新特性! (数据科学学习手札124)pandas 1.3版本主要更新内容一览 动态规划_备忘录法_矩阵链乘问题 最新的.NET 热重载介绍 基于uni-app全端弹框组件uaPopup「兼容h5+小程序+app端|nvue」 2021-07-10

对抗样本综述(一) Python协程你学会了吗? 海量数据Excel报表利器——EasyExcel(一 利用反射机制导出Excel) 《面试补习》-熔断降级我学会了! 完了,又火一个项目 Vue 两个字段联合校验典型例子--修改密码 ES2021 新特性! (数据科学学习手札124)pandas 1.3版本主要更新内容一览 动态规划_备忘录法_矩阵链乘问题 最新的.NET 热重载介绍 基于uni-app全端弹框组件uaPopup「兼容h5+小程序+app端|nvue」 Innodb中有哪些锁? 『无为则 2021-07-10

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfggg.html