Crping.EFCore.Common 10.2.2

dotnet add package Crping.EFCore.Common --version 10.2.2
                    
NuGet\Install-Package Crping.EFCore.Common -Version 10.2.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Crping.EFCore.Common" Version="10.2.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Crping.EFCore.Common" Version="10.2.2" />
                    
Directory.Packages.props
<PackageReference Include="Crping.EFCore.Common" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Crping.EFCore.Common --version 10.2.2
                    
#r "nuget: Crping.EFCore.Common, 10.2.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Crping.EFCore.Common@10.2.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Crping.EFCore.Common&version=10.2.2
                    
Install as a Cake Addin
#tool nuget:?package=Crping.EFCore.Common&version=10.2.2
                    
Install as a Cake Tool

Crping.EFCore.Common

Crping.EFCore的接口与类型定义

版本更新说明


10.2.2

2026年9月15日 星期二

Crping.EFCore / Crping.EFCore.Controller 同步升至 10.2.2 —— ct 全量复查批次:接口零变更、升级零迁移、需重编译

本包源码零变更(同步升版);ct 修复明细见 Crping.EFCore / Crping.EFCore.Controller 对应段落。

10.2.1

2026年9月15日 星期二

Crping.EFCore / Crping.EFCore.Controller 同步升至 10.2.1 —— 审计修复批次:公开 API 零变更、升级零迁移、需重编译

性能修复 — 表达式指纹不再物化 JSON 字符串

  • CacheKeys.FormatCapture 非基元闭包捕获(如 ids.Contains(x.Id) 的集合)改 SerializeToUtf8Bytes 直出:未超限(≤128 UTF8 字节)转回可读 JSON 文本(纯 ASCII 键与旧版完全一致),超限直接对字节流 SHA256 指纹化——旧实现先整体序列化字符串再按 128 字符长度判定丢弃,大集合捕获每次构建缓存键数百 KB 无谓分配;字符串捕获路径不变(仍按字符数判定)

文档化

  • 双分页信息契约(ListPage.PaginationOffsetPage.PaginationInfo 并存)为兼容旧项目引用的既定设计,保留不收敛;ListPage / Pagination / OffsetPage XML 注释补分页方法选择建议(新代码:深翻页用 Keyset,需总数跳页用 Offset,ListPage 勿新增依赖);CacheKeys 键格式与公开 API 本批零变更

10.2.0

2026年9月14日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 10.2.0

废弃警告 — ResData 标记 [Obsolete]

  • 全解决方案无内部消费(响应契约统一 ApiResult/ApiResult<TData>),标记废弃保留编译兼容,计划下一破坏性版本移除
  • 无其他变更;升级自 10.1.0 零迁移、需重编译

10.1.0

2026年9月13日 星期日

Crping.EFCore / Crping.EFCore.Controller 同步升至 10.1.0

  • 无功能性变更,仅同步版本号(kebab-case 路由风格组件化 AddEFCoreKebabCaseRouting 为 Controller 层新功能,Common 契约未变);升级自 10.0.0 零迁移、需重编译
  • 本版本起包内附带 XML 文档文件(lib/net10.0/Crping.EFCore.Common.xml)——消费方 IntelliSense 显示中文注释(此前 Common 包不含 XML 文档)

10.0.0

2026年9月11日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 10.0.0 —— v10 破坏性收口线开启

破坏性变更 — ICacheManager 三调参属性收窄为 { get; }

  • VersionLocalCacheTtl / MaxThrottleEntries / LogThrottleWindow 移除 set(init-only 收口,与 Core 层 CacheManager / MyDbContextFactory 旋钮同批)
  • 配置途径不变且更受约束:EFCoreCacheOptionsAddEFCoreCache 配置节 / DI / 构造参数,推荐)或对象初始化器构造时一次性赋值,运行期不可修改(原「运行期请勿修改」仅文档约定,现由编译器强制)
  • 外部自定义 ICacheManager 实现者需移除三属性 setter;经接口赋值的调用点改走 EFCoreCacheOptions
  • 需重编译(源码赋值点 CS8852 编译失败 + init setter 二进制不兼容)

第二批增补 — 无契约变更

  • CacheEnable 类仅 XML 文档更新(注册途径描述改为 AddEFCoreCacheEnable Options 通道);静态注册表与端点收口均为 Core / Controller 层变更

第三批增补 — IKit.Cache 成员移除(破坏性)

  • IKit<TCategoryName> 接口移除 ICacheManager Cache { get; }(与 ICacheBLL.CacheManager 双属性暴露同一实例的遗留重复);接口仅保留 Logger
  • IWebApiBaseBLL 同时实现 ICacheBLL——BLL 消费方迁移 bll.Cachebll.CacheManagerBaseDomain.Cache 为 Domain 自有属性不受影响
  • 外部自定义 IKit 实现者需移除 Cache 实现

第四批增补 — 接口委托槽位成员改名(破坏性,纯改名零行为变更)

  • ICurrentUser<TUserKey>GetCurrentUserIdCurrentUserIdResolver
  • IGenerateId(接口名不变):GenerateIdIdGenerator
  • IDomain<TUserKey>GetAuthorizationAuthorizationResolverGetAuthHeaderValueAuthHeaderValueResolver
  • 改名依据:槽位为 Func 属性,取名词形态与 ResolveSort / ResolveConfig 的 Resolver 词族一致,并消除与 Controller 侧同名方法的同名不同义(Controller 方法不改名)
  • 需重编译:外部自定义 ICurrentUser / IGenerateId / IDomain 实现者同步成员名(编译器逐点暴露);值属性 CurrentUserId / Authorization / AuthHeaderValue 不变
  • 迁移表与完整说明见 Core 包 Readme 10.0.0 第四批增补

9.25.0

2026年9月11日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.25.0

  • 无功能性变更,仅同步版本号(Domain 事务编排助手 InTransactionAsync 为 Core 层 BaseDomain 新增,零接口变更、仅加在 BaseDomain 不加 IDomain,Common 契约未变)

9.24.0

2026年9月11日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.24.0

  • 无功能性变更,仅同步版本号(BaseDomain 身份委托 AsyncLocal 化、SyncConfig 漏配诊断、Cache/Logger 未注入归 InvalidOperationException 均为 Core 层变更,Common 契约未变)

9.23.0

2026年9月11日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.23.0

  • 无功能性变更,仅同步版本号(BaseDomain.CurrentUserId 401 对齐、ShareDbContext null 守卫、BaseDomain XML 收口与 CacheManager 风格项均为 Core 层变更,Common 契约未变)

9.22.0

2026年9月11日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.22.0

  • 无功能性变更,仅同步版本号(MyDbContextFactory 时间源统一、工厂配置错误异常类型统一、构造参数守卫与重复连接名检测均为 Core 层变更,Common 契约未变)

9.21.0

2026年9月12日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.21.0

  • 无功能性变更,仅同步版本号(BLL 全家族 CancellationToken 透传、内存路径 owner 校验 NRE 修复、CurrentUserId 未设置归 401、Cache 属性 Obsolete 垫片均为 Core 层变更,Common 契约未变)

9.20.0

2026年9月12日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.20.0

  • 无功能性变更,仅同步版本号(删除外键冲突 409 分类、WhereNotDeleted 软删除过滤扩展、BaseDAL 评审 P1/P2 收口与全量 CancellationToken 透传均为 Core 层变更,ISoftDelete 等 Common 契约未变)

9.15.0

2026年9月12日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.15.0

  • 无功能性变更,仅同步版本号(CacheEnable Options 化为 Controller 层变更:新增 CacheEnableOptions / AddEFCoreCacheEnable 集中配置入口与控制器构造链透传注入;CacheEnable 契约未变)

9.14.0

2026年9月11日 星期四

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.14.0

  • 新增 CacheEnable.Clone()public virtualMemberwiseClone 浅拷贝;开关均为基元类型即完整副本,派生类携带引用类型成员应重写):Controller 层三个注册表(MethodsEnableRegistry / MethodRouteRegistry / CacheEnableRegistry)注册时存储防御性快照——多个控制器注册同一配置实例互不泄漏,注册后修改原实例不影响已注册配置;MethodsEnable.Clone 在 Controller 包同步提供

9.13.0

2026年9月2日 星期三

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.13.0

  • 新增 EFCoreCacheOptions 缓存全局配置(纯 POCO,零新依赖):DefaultPolicy 默认缓存策略(滑动/绝对/ExpirationJitter/CacheNull 四属性整体)+ 续期节流比例 RefreshThrottleFraction、版本号本地缓存 TTL、节流记录上限、降级告警限频窗口四个进程级调参;配合 Core 层 AddEFCoreCache(委托 / appsettings EFCoreCacheOptions.ConfigSection"Crping.EFCore.Cache")节)或 AddEFCoreRedisCache/AddEFCoreMemoryCache 的配置节参数一站式使用;显式配置均为 Replace 语义(后到优先、注册顺序无关),CachePolicy 契约未变

9.12.0

2026年8月31日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.12.0

  • 无功能性变更,仅同步版本号(缓存取消语义收窄为 Core 层 CacheManager / WebApiBaseBLL 变更,Common 接口契约未变)

9.11.0

2026年8月31日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.11.0

加固 — 缓存键按需叶子求值 + 指纹上限(防误用巨型键)

  • CacheKeys 闭包捕获按需取值:表达式键对根部为闭包实例的成员访问链(如 video.AwemeId)仅反射求值叶子成员,不再整体序列化捕获对象——条件表达式捕获实体/DTO(误用,API 层无法禁止)时,键只含实际参与比较的值;键长大幅缩短且"同值异例"请求互相命中(旧实现每对象一键,命中率≈0)。真实案例:抖音搜索任务循环 ExistAsync(n => n.AwemeId == video.AwemeId, true),旧实现每个 AwemeInfo 对象(含 rawdata 整条原始 JSON)整体序列化入键,单键数十~上百 KB 且每条视频一键,GUI Redis 客户端打开键库即溢出
  • 链上逐级反射取值,中途失败(getter 抛异常等)返回上级已取值,最差退化类型全名(与旧实现一致);命中叶子即停止下钻,内层链与闭包常量不重复入键;对基元值捕获键格式不变,旧键由 TTL 兜底自然过渡
  • FormatCapture 捕获段上限 128 字符:超长字符串/大集合捕获以 #sha256前32位(len) 指纹替代原文,键长有界且异值异键;新增公共 CacheKeys.Fingerprint 指纹工具(Core 层 CacheManager.BuildKeyAsync 键长守卫复用同一格式)
  • 影响面:改动只触碰键构建,缓存值(详情/列表的大 JSON)完全不受影响;正常大投影键原样保留(21 字段投影详情键实测 619 字符),仅病态键(>2KB,Core 层守卫)指纹化

(测试 +4:捕获实体叶子求值 1 例、同值异例同键 1 例、超长捕获指纹 1 例、求值失败回退 1 例,测试位于 Core 测试工程;旧「整对象 JSON 入键」断言随行为修订)


9.10.0

2026年8月30日 星期日

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.10.0

修复 — 时间源与遗留死逻辑

  • ModelBase 移除 CreatedAtDateTimeOffset.Now 属性初始化器:审计时间统一由注入的 TimeProvider 提供(BaseDAL.CreateAsync 已新增兜底填充,直接使用 DAL 不丢审计时间),实体初始化器不再绕过注入的时间源——FakeTimeProvider 测试可控、时间源单一
  • EFCoreExt.UpdateTo 排除表 "ID""Id":修复库主键属性名(ModelBase.Id)永不命中导致 src 主键覆盖 dest 的问题
  • EFCoreExt.GetValue 重写:按 lambda 参数名匹配属性(恒失败)改为解析表达式体成员名,支持引用/值类型属性(Convert 解包);成员链表达式返回 null;null 入参抛 ArgumentNullException

(测试 +6:UpdateTo 主键/审计保护 2 例、GetValue 取值 3 例、ModelBase 默认值 1 例)


9.9.0

2026年8月29日 星期六

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.9.0

  • 无功能性变更,仅同步版本号(RecordCount / 取消令牌 / 注册表线程安全为 Core/Controller 层变更,Common 契约未变)

9.8.0

2026年8月28日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.8.0

优化 — 缓存键指纹与开关性能

  • CacheKeys.BuildExpressionKey 闭包捕获值健壮化:基元/内置值类型固定文化格式化(InvariantCulture,防跨文化部署键漂移);其余引用类型 JSON 序列化区分实例内容(默认 ToString 仅返回类型名,不同实例会同键串数据);序列化失败退化类型全名
  • CacheKeys.DetailProjected / Kvp / Cascade 键新增投影类型段(Convert(x.Prop, Object) 解包取真实类型):同结构签名但成员类型不同的投影生成不同键(防串数据)
  • CacheEnable.GetSwitch 预编译 getter 委托(CreateDelegate),热路径零反射

新功能 — 配置属性

  • ICacheManager 新增 LogThrottleWindow(降级告警限频窗口,默认 30s):缓存读/写/续期/删除与版本号读/递增 6 类事件窗口内各只记一条 Warning,防故障期间日志洪泛

优化 — CacheKeys 表达式指纹记忆化

  • BuildExpressionKey 表达式结构签名 CWT 记忆化(ConditionalWeakTable<Expression, string> 弱引用键无泄漏):共享静态选择器(DetailsSelector / KvpsSelector 等)热路径免每请求 ToString();闭包捕获值仍逐请求提取(捕获值随请求变化,不可记忆化)
  • ICacheManager.MaxThrottleEntries 注释明示软上限语义:1 小时内热键基数超限时续期节流字典可短时超限(有界于热键基数,误删无害,仅下次多续期一次)

9.7.0

2026年8月26日 星期三

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.7.0

优化 — CacheKeys 缓存键工厂

  • CacheKeys 扩展为缓存键集中构建器:Detail / DetailProjected / Kvp / Total / Count / Exist / Cascade 具名方法 + 前缀常量——键格式单一出处(原散落在 Core 各 partial 文件与测试中的魔法字符串),方法名即用途、防拼错
  • Total(int lastDays, DateOnly window) 键含统计日期段(total:{lastDays}:{yyyyMMdd}),跨天自动换键,时间敏感统计不陈旧

新功能 — 缓存防穿透

  • GetByIdAsync(id, useCache, policy) 新增 CachePolicy? 重载:设 CacheNull=true 可缓存"未找到"的空值(防穿透),配合模型版本号失效机制,实体后续创建后立即可见

9.6.0

2026年8月24日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.6.0

新功能 — 接口补齐

  • ICacheManager 新增 VersionLocalCacheTtl(版本号本地缓存有效期)和 MaxThrottleEntries(续期节流记录上限)配置属性

9.5.0

2026年8月21日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.5.0

  • 无功能性变更,仅同步版本号(GenerateId Snowflake 式位布局为 Core 层变更,Common 契约未变)

9.4.0

2026年8月18日 星期二

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.4.0

新功能 — AuditStatus 枚举 + IAuditStatus 接口

  • AuditStatus 枚举(Crping.EFCore.Common.Enums):Pending(待审核)/ Approved(已通过)/ Rejected(已驳回),带 Display(Name) 元数据
  • IAuditStatus 接口(Crping.EFCore.Common.Interfaces):AuditStatus AuditStatus { get; set; }——枚举三态版本,与 IAudit 布尔开关互补共存
  • IUpdateBLL 新增 MaxBatchUpdateSize 配置属性(批量更新上限,默认 1000)

9.3.0

2026年8月18日 星期二

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.3.0

  • 无功能性变更,仅同步版本号(GetOrCreateAsync 嵌套事务修复为 Core 层变更,Common 契约未变)

9.2.0

2026年8月18日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.2.0

  • 无功能性变更,仅同步版本号(ResultCode 新增 5xx 枚举 + ApiResult InternalError 工厂为 Core 层变更,Common 契约未变)

9.1.2

2026年8月16日 星期日

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.1.2

  • 无功能性变更,仅同步版本号(ApiResult StatusCode 透传工厂为 Core 层变更,Common 契约未变)

9.1.1

2026年8月16日 星期日

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.1.1

  • 无功能性变更,仅同步版本号(ApiResult 带数据重载与错误参数收窄均为 Core 层变更,Common 契约未变)

9.1.0

2026年8月15日 星期六

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.1.0

  • 无功能性变更,仅同步版本号(ApiResult 静态工厂族与 EFCoreExt.WhereLike 均为 Core 层变更,Common 契约未变)

9.0.0

2026年8月15日 星期六

Crping.EFCore / Crping.EFCore.Controller 同步升至 9.0.0

破坏性变更 — 删除过时接口与扩展方法(v9.0.0 未发布,无兼容负担)

  • 删除旧接口 IMyConfiguration(→ IAppConfiguration)、IToVo(→ IViewObject)、IEnabled(→ IIsEnabled)、IDisabled(→ IIsDisabled
  • 删除公共扩展方法 NotDisabled<TModel>(旧 IDisabled 版)与 OnlyEnabled<TModel>(旧 IEnabled 版),统一使用 NotIsDisabled / OnlyIsEnabled
  • 其余 BLL 去 MVC 分层解耦 / 写后读绑定 Options 化均为 Core 层与 Controller 层变更

8.11.0

2026年8月13日 星期四

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.11.0

  • 无功能性变更,仅同步版本号(依赖升级 / 写后读绑定中间件 / 修复均为 Core 层与 Controller 层变更,Common 契约未变)

8.10.0

2026年8月13日 星期四

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.10.0

破坏性变更 — Keyset 游标格式定稿(Common 层 KeysetCursor

  • 枚举游标值仅存底层数值:EncodeValue 枚举分支移除内嵌 AssemblyQualifiedName 类型名(游标更短、解码不再有 Type.GetType 类型加载路径,AOT/裁剪友好)
  • Decode 移除双参数重载,expectedTypes 参数必填:按排序键期望类型还原值(含枚举),键值数量/类型强校验,无 legacy 纯格式解码路径(旧"退化为纯格式解码"行为移除)
  • 其余 Keyset / Offset 性能优化与列表 API 三态对齐(ListQuery / GetListPageAsync / 删旧列表 API)为 Core 层变更,Common 契约(ListPage / OffsetPage / KeysetPage 等)未变

8.9.0

2026年8月12日 星期三

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.9.0

  • 无功能性变更,仅同步版本号(ResolveSort 排序键解析虚方法为 Core 层 WebApiBaseBLL 变更,Common 契约未变)

8.8.0

2026年8月11日 星期二

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.8.0

  • 无功能性变更,仅同步版本号(点分路径排序键提取 / bool 排序键修复 / OrderBy 全能化重构均为 Core 层 KeysetQuery / KeysetPredicateBuilder 变更,Common 契约未变)

8.7.0

2026年8月11日 星期二

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.7.0

破坏性变更 — 分页结果契约属性顺序调整与 required 强化

  • KeysetPage<T> / OffsetPage<T>PageInfo / Pagination 属性移至 Items 之前
  • 两个属性均改为 required init(移除默认值),调用方构造时必须显式提供所有属性
  • 迁移指南:JSON 反序列化顺序可能变化,手动构造对象时需调整属性顺序或使用命名参数

8.6.0

2026年8月10日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.6.0

新类型 — ListPage<T> 分页契约

  • ListPage<T>(sealed、init-only):{ required Pagination Pagination, required List<T> Items },作为旧分页 API(GetListAsync / 分页版 GetRawListAsync)的两段式返回契约(破坏性:返回类型变更,需重编译)

其余无功能性变更:OrderByExpr 任意表达式排序为 Core 层 KeysetQuery / OffsetQuery 构建器变更,KeysetCursor 编解码未变。


8.5.0

2026年8月9日 星期日

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.5.0

新增类型(端点级缓存开关)

  • CacheEnable:按端点控制读操作缓存的开关集合(9 个开关,默认全关):GetDetailsAsync / GetAsync / GetDetailsForAdminAsync / GetForEditorAsync / GetForAdminEditorAsync / GetSimpleAsync / GetListItemAsync / GetKvpsAsync / GetTotalAsyncGetSwitch(name) 反射缓存解析,未知开关名抛出带有效列表的 InvalidOperationException;仅门面方法(对应 HTTP 端点)查询,共享方法只响应调用方显式传入的 useCache 三态参数(互不干扰)

接口变更(破坏性 — 二进制不兼容,需重编译)

  • ICacheManager.GetAsync<T> 新增可选参数 CachePolicy? policy = null:提供滑动过期策略时命中会续期(与 GetOrAddAsync<T> 行为一致);现有调用源码兼容(bool 隐式转 bool? 同理适用于三态化后的各 BLL 读方法签名)

8.4.0

2026年8月8日 星期六

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.4.0

  • 无功能性变更,仅同步版本号(TimeProvider 注入为 Core 层 BLL/DAL 变更,Common 接口未变)

8.3.0

2026年8月8日 星期六

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.3.0

  • 无功能性变更,仅同步版本号(Controller 层健壮性/开关机制完善与 Core 层 DatabaseExtensions 迁入,Common 接口未变)

8.1.0

2026年8月8日 星期六

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.1.0

破坏性变更 — 分页结果契约两段式

  • OffsetPage<T>{ items, pagination }:删除顶层 8 个分页属性(Page / PageSize / PageCount / RecordCount / HasNext / HasPrev / OrderBy / Ascending)与 ToPagination(),新增不可变 PaginationInfo Pagination
  • KeysetPage<T>{ items, pageInfo }:删除顶层 5 个属性(NextCursor / PrevCursor / HasNext / HasPrev / PageSize),新增不可变 KeysetPageInfo PageInfo
  • 新增 PaginationInfo / KeysetPageInfo(全部 init-only,结果契约不可被调用方事后修改)
  • 调用方迁移:page.Pagepage.Pagination.Pagepage.HasNextpage.PageInfo.HasNext

8.0.0

2026年8月7日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 8.0.0

  • 无功能性变更,仅同步版本号(useCache 缓存开关、ConnectionName 只读化均为 Core / BLL 层变更,Common 接口未变)

7.7.0

2026年8月7日 星期五

Crping.EFCore / Crping.EFCore.Controller 同步升至 7.7.0

新增类型(统一缓存管理,无 EF 依赖)

  • ICacheManager:统一缓存门面接口(泛型 GetOrAdd / Get / Set / Remove / Invalidate + Stats 命中统计),键由 modelKey + 版本号 + keySuffix 组成
  • CachePolicy:缓存策略(滑动/绝对过期、CacheNull 空值防护、ExpirationJitter 过期抖动防雪崩)
  • ICacheVersionStore:模型版本号存储抽象(Get / Increment),支撑模型级原子失效
  • CacheKeys:表达式缓存键生成器(结构签名 + 闭包捕获值,防闭包键冲突)
  • CacheHitStats:命中统计(Hits / Misses / HitRate)

7.6.0

2026年8月6日 星期四

Crping.EFCore / Crping.EFCore.Controller 同步升至 7.6.0

新增类型(Offset 偏移分页契约)

  • OffsetPage<T>:偏移分页结果契约(Items + Page + PageSize + RecordCount + PageCount + HasNext + HasPrev + OrderBy + Ascending),与 KeysetPage<T> 对称;含 ToPagination() 供旧响应形状包装

7.5.0

2026年8月6日 星期四

Crping.EFCore / Crping.EFCore.Controller 同步升至 7.5.0

新增类型(Keyset 游标分页契约,无 EF 依赖)

  • KeysetPage<T>:分页结果契约(Items + NextCursor / PrevCursor + HasNext / HasPrev)
  • KeysetCursor:游标编解码器,不透明 Base64Url 令牌,支持 HMAC 签名(KeysetCursor.SigningKey
  • KeysetDirection:Next / Prev 查询方向枚举

修复与增强(2026-08-06)

  • KeysetCursor 载荷 JSON 改用源生成器(AOT 友好),签名校验 / JSON / 值解析全流程异常统一包装为 ArgumentException
  • KeysetPage 属性收紧为 init

7.4.0

2026年8月3日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 7.4.0

  • 无功能性变更,仅同步版本号

7.3.0

2026年7月30日 星期三

Crping.EFCore / Crping.EFCore.Controller 同步升至 7.3.0

破坏性变更 — 时间类型从 DateTime 改为 DateTimeOffset

  • IModel<TKey>.CreatedAtDateTimeDateTimeOffset
  • IUpdatedAt.UpdatedAtDateTime?DateTimeOffset?
  • IDeletedAt.DeletedAtDateTime?DateTimeOffset?
  • IDelete<T>.DeletedAtDateTime?DateTimeOffset?
  • IAuditor<T,U>.AuditedAtDateTime?DateTimeOffset?
  • ICreatedDate.CreatedDateDateTimeDateTimeOffset
  • ICreatedTime.CreatedTimeDateTimeDateTimeOffset
  • IStartTime.StartTimeDateTime?DateTimeOffset?
  • IStartDate.StartDateDateTime?DateTimeOffset?
  • IEndDate.EndDateDateTime?DateTimeOffset?
  • IEndTime.EndTimeDateTime?DateTimeOffset?

其他变更

  • IParent<T>:支持可空类型参数(如 IParent<int?>),根节点可使用 null

迁移指南

  • 将实体中的 DateTime 属性改为 DateTimeOffset
  • DateTime.Now 改为 DateTimeOffset.Now
  • 数据库列类型从 datetime2 改为 datetimeoffset

7.2.0

2026年7月28日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 7.2.0

新增接口

  • IAppConfiguration:应用配置引用接口,提供 IConfiguration 实例,语义比 IDbConfiguration 更准确

重命名(向后兼容)

  • IMyConfigurationIAppConfiguration:旧接口标记 [Obsolete] 并继承新接口
  • IDbConfiguration:已删除(上一版本新增,因命名不当移除)

7.1.0

2026年7月28日 星期一

Crping.EFCore / Crping.EFCore.Controller 同步升至 7.1.0

新增接口

  • IViewObject:视图对象输出接口,替代 IToVo
  • IDbConfiguration:数据库配置接口,替代 IMyConfiguration

重命名(向后兼容 — 旧接口标记 [Obsolete]

  • IToVoIViewObject:旧接口保留并继承新接口,编译时产生 CS0618 警告
  • IMyConfigurationIDbConfiguration:旧接口保留并继承新接口
  • IEnabledIIsEnabled:旧接口标记 [Obsolete](属性名 Enabled vs IsEnabled 不同,无法继承)
  • IDisabledIIsDisabled:旧接口标记 [Obsolete]

7.0.0

2026年7月26日 星期日

Crping.EFCore / Crping.EFCore.Controller 同步升至 7.0.0

  • 修复:ModelWithName.Name setter 增加 null 防护 — 之前 value.Trim()valuenull 时会抛 NullReferenceException,现改为 value?.Trim() ?? string.Empty
  • 清理:删除 3 个全注释死代码文件(破坏性变更 — 下游若手动引用这些类型会编译失败)
    • Models/GenericConverter.cs
    • Models/UserKey.cs
    • Enums/TaskState.cs
  • 内部:DateTime.Now → DateTime.UtcNow 改造(ModelBase.CreatedAt / EFCoreExt.UpdateTo)曾被提交后又完整回退,净状态未变

6.4.0

2026年7月16日 星期四
  • 优化所有命名空间
  • 调整项目目录结构:Crping.EFCore.* 项目统一嵌套到 Crping.EFCore/

6.0.0

2025年11月27日 星期四
  • 升级为 .net10.0

5.5.0

2025年10月21日 星期二
  • 新增扩展方法NotDisabled(...), NotIsDisabled(...), OnlyEnabled(...), OnlyIsEnabled(...)

5.4.0

2025年9月25日 星期四
  • 新增接口IDeletedAt, IAuditor, IAudit

5.3.0

2025年7月8日 星期二
  • 新增过滤软删除扩展方法NotSoftDeleted

5.2.1

2025年6月29日 星期日
  • 新增接口IAddress<T>

5.2.0

2025年5月22日 星期四
  • 新增接口ISoftDelete

5.1.0

2025年4月19日 星期六
  • 新增接口:IContents<T>ITitle<T>

5.0.0

2024年11月17日 星期日
  • 升级为 .net9.0
  • 更新引用组件

4.5.0

2024年10月19日 星期六
  • 接口 IKey<TId>IModel<TKey> 默认类型改为 string

4.3.0

2024年4月12日 星期五
  • 新增接口ISortIndex<T>IIsEnabled

4.2.0

2024年4月9日 星期二
  • 新增接口IToolkit

4.1.0

2024年3月28日 星期四
  • 修改:Cascader<TKey>Cascade<TKey>
  • 新增接口:IAccountIAvatarIEmailIIsDisabledIPhoneNumber

4.0.1

2024年3月21日 星期四
  • 移除ICreateTKeynotnull约束

4.0.0

2024年1月27日 星期六
  • 升级目标框架为.net8.0
  • 升级Microsoft.Extensions.Configuration.Abstractions8.0
  • 与系列相关组件对齐版本号

3.20.1

2023-08-22
  • 接口ICreatedDateICreatedTime的日期改为不为空

3.20.0

2023-07-24
  • 新增接口IUpdatedAt
  • 修改接口IUpdate<TUserKey>

3.19.0

2023-06-29
  • 为所有泛型参数TKey添加约束notnull
  • 重命名部分泛型参数
  • 新增接口IUpdate<TKey>IDelete<TKey

3.18.0

2023-06-11
  • 新增接口IKeysetPagination,以及实现类KeysetPagination
  • 新增扩展方法GetValue(...)

3.17.0

2023-06-07
  • 新增升序扩展方法Ascending(...)
  • 新增降序扩展方法Descending(...)

3.16.0

2023-05-21
  • 新增接口ICreator<TUser, TKey>

3.15.0

2023-05-11
  • 新增接口IToVo

3.14.0

2023-05-10
  • IIntro修改为可空
  • 修改日期时间相关接口的数据类型为DateTime?
  • 新增接口INickname
  • 修改接口IUserNameIUsername

3.13.0

2023-05-10
  • 新增接口:IUpdater<T>IDeleter<T>IAddress

3.12.0

2023-04-26
  • 新增接口:IParent<T>
  • 新增实体:Cascader<TKey>

3.11.0

2023-04-20
  • 新增接口ICreate<T>

3.10.0

2023-04-15
  • 项目启用可空类型
  • 修复启用可空类型后产生警告的代码
  • 新增接口ICreator
  • 修改接口IConnectionStringIMyConfiguration

3.8.0

2023-03-28
  • Crping.EFCore移入接口IConnectionString,IMyConfiguration

3.7.0

2023-02-18
  • 新增接口IKeysetPagination与类KeysetPagination

3.6.0

2023-02-03
  • 将运行时修改为net7.0

3.5.1

2023-01-03
  • 新增接口:IKey:IKey<int>

3.5.0

2023-01-03
  • 新增接口IKey<>,并添加到IModel<>
  • 新增全局引用Global,并优化所有代码

3.4.0

2022-05-18
  • 修改 IPagination 和 Pagination 的排序方式字段

历史版本

  • 3.4.0:修改 IPagination 和 Pagination 的排序方式字段
  • 3.3.0:添加IGender,IIntro等一系列常用接口
  • 3.2.1:重命名接口ICreatedDate,ICreatedTime,并修改其属性类型
  • 3.2.0:添加枚举ProcessingStatus,接口IProcessingStatus
  • 3.1.4:优化JsonPropertyOrder值
  • 3.1.3:为属性添加JsonPropertyOrder
  • 3.1.2:为Name属性添加字段长度限制
  • 3.1.1:为属性添加[Column(Order = 0)]等
  • 3.1.0:添加ModelBase,IName,ModelWithName等
  • 3.0.2:Utils类改为EFCoreEx
  • 3.0.1:修改PaginationData,以适应Dapr反序列化
  • 3.0.0:目标框架改为.net6.0
  • 1.1.3:还原Pagination的部分修改
  • 1.1.2:修复Pagination的Bug
  • 1.1.1:优化Pagination的CountPages()方法
  • 1.1.0:Pagination 添加 QueryString 属性
  • 1.0.0:提供 Crping.EFCore 组件所需基础类接口等
2022-04-01
  1. 重命名接口ICreatedDate,ICreatedTime,并修改其属性类型
  2. 添加一系列常用接口
2022-03-14
  1. 添加枚举:ProcessingStatus
  2. 添加接口:IProcessingStatus
2022-02-28
  1. 添加ModelBase<T>,ModelBase
  2. 添加IName, ModelWithName<T>,ModelWithName
  3. 为属性添加[Column(Order = 0)]等
  4. 为Name属性添加字段长度限制
  5. 为属性添加:JsonPropertyOrder
  6. 优化Column(Order = 0),JsonPropertyOrder
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (7)

Showing the top 5 NuGet packages that depend on Crping.EFCore.Common:

Package Downloads
Crping.EFCore

基于 `EntityFramework Core` 的数据库操作工具包基础类

Crping.Auth.Models

Crping.Auth 实体数据结构

Crping.Auth.DAL

Crping.Auth.DAL 基类

Crping.AuthPolicy.BLL

Package Description

Crping.AuthPolicy.Models

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.2.2 101 9/15/2026
10.2.0 103 9/14/2026
10.1.0 100 9/13/2026
10.0.0 107 9/11/2026
9.13.0 144 9/3/2026
9.12.0 117 8/31/2026
9.11.0 118 8/31/2026
9.10.0 122 8/30/2026
9.9.0 113 8/29/2026
9.8.0 117 8/29/2026
9.7.0 119 8/26/2026
9.6.0 126 8/24/2026
9.5.0 146 8/22/2026
9.4.0 138 8/18/2026
9.3.0 125 8/18/2026
9.2.0 121 8/18/2026
9.1.2 133 8/16/2026
9.1.1 124 8/16/2026
9.1.0 120 8/15/2026
9.0.0 121 8/14/2026
Loading failed