ShardingCore 7.0 版本发布

NCC ShardingCore 是一款 EntityFramework Core based 高性能、轻量级、分表分库、读写分离解决方案,具有零依赖、零学习成本、零业务代码入侵等特点。ShardingCore 7.0 已于近期发布。

从 ShardingCore 7.0 开始,启用版本号第二位来对应不同的 EFCore  版本,如 7.6.0.5 针对的是 EFCore 6.x 等。

变更日志

  • 添加对 EF Core 7.0 的支持

  • 移除 IShardingModelCacheOption,为默认缓存设置进行了建议配置

  • 添加模型并发等级,以便解决模型超时 BUG

  • 修正 FromSqlRaw 丢失 where 子句的 BUG #217

  • 修正分片路由为空时,join 未分片对象,导致分片对象被误认为非分片对象的 BUG

  • 修正集成使用 Z.EntityFramework.Plus 批量处理时报错的 BUG #179

  • 启用了全新的版本规范,版本号第二位对应 EF Core 版本号

  • 其他

重要提示

  • 升级如果不使用app.ApplictaionServices.UseAutoShardingCreate()将不会自动创建表任务;

  • 如果使用 IIS 代理,需要关闭应用程序池的固定回收,并将空闲回收设置为 0,否则 ShardingCore 的建表任务可能不会生效。

与其他开发框架的集成

目前,NCC ShardingCore 能与多款开发框架进行集成,开发者可以通过阅读项目文档,对照官方 DEMO 快速上手集成。ShardingCore 目前提供了以下开发框架的集成 DEMO:

  • 原生 EF Core (自不必说)

  • Volosoft AbpVNext

  • Volosoft AbpZero

  • Furion

  • WTM

详情可参考:

  • https://github.com/dotnetcore/sharding-core/tree/main/samples

  • https://www.cnblogs.com/xuejiaming/p/16450663.html

  • Volosoft AbpVNext Demohttps://github.com/xuejmnet/ShardingWithFramework/tree/main/abp/toapp

  • FurionDemohttps://github.com/xuejmnet/ShardingWithFramework/tree/main/furion

  • WTM Demohttps://github.com/xuejmnet/ShardingWithFramework/tree/main/wtm

现有系统接入注意事项

现有系统接入 ShardingCore,需要注意以下几点

批处理 Batch Ops

ShardingCore 支持 Ef Core 生态下的多个批处理框架,其中代表作比如:

  • Z.EntityFramework.Plus.EFCore

  • EFCore.BulkExtensions

默认的 EF Core  批处理基于当前 DbContext,如果开发者自定替换了 DbContext,则在集成 ShardingCore 时,需要注意批处理的兼容情况。ShardingCore 在默认情况下,ShellDbContext 带多个 ExecutorDbContextShellDbContext 会代理原有的查询,故而原有的批处理工作不能在 DbContext 中使用。

具体可参考 ShardingCore 批量操作文档:https://xuejmnet.github.io/sharding-core-doc/adv/batch-operate/

追踪 Tracking

默认情况下,ShardingCore 支持 EFCore 的追踪功能(即便是读写分离的情况下),支持包括 SelectAddUpdate 和 Remove,但无法获取 DbContext.ChangeTracker 下的方法。目前有两种解决方案:

  1. 重写 ChangeTracker,可以参考本项目的 ShardingChangeTracker,通过替换 IChangeTrackerFactory 来实现;

  2. 通过 AbstractShardingDbContext 下的 IShardingDbContextExecutor 获得当前 DbContext,而后进行相应的操作。

如果需要在 SaveChanges 时对一些变更新信息进行记录(如审计等),可通过重写带有 Boolean 参数的 SaveChanges 方法来达到目的:

public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
    if (IsExecutor)
    {
        // 审计操作
        // ChangeTracker.Entries().Where(xxx)
    }
    
    return base.SaveChanges(acceptAllChangesOnSuccess);
}

常见问题

使用外键报错

建议移除外键。参考:
https://github.com/dotnetcore/sharding-core/blob/main/samples/Sample.Migrations/RemoveForeignKeyMigrationsModelDiffer.cs

没有自动建表
  • 检查 IIS 设置,关闭应用程序池的固定回收,并将空闲回收设置为 0

  • 检查数据库连接对应的账户是否具有建表权;

  • 检查各路由建表的时间节点所对应的日志;

  • 选择开启 DoLogError,错误日志将详细输出。

不想在默认的时间点建表

修改对应的 CRON 表达式方法:*GetCronExpressions()*,并重写 IncrementMinutes 的值。

如何选择版本

ShardingCore 版本号中的第二位对应了 EF Core 的版本号,因此在选择 ShardingCore 时,请认准第二位版本号的编号;ShardingCore 第一位表示大版本号,第三位和第四位是小版本号,一般这三位数选择最新版本即可。

  1. EFCore 7.x 选择 ShardingCore 7.7.x.x

  2. EFCore 6.x 选择 ShardingCore 7.6.x.x

  3. EFCore 5.x 选择 ShardingCore 7.5.x.x

  4. EFCore 3.x 选择 ShardingCore 7.3.x.x

  5. EFCore 2.x 选择 ShardingCore 7.2.x.x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值