2026-05 — 3.3.2.5

  1. 自研对象映射器 MMapper 替代 AutoMapper(消除 CVE-2026-32933)
  2. 保留完整 AutoMapper 兼容 shim:MapperConfiguration / IMapper / Profile / IQueryable.ProjectTo 全套支持,外部 NuGet 用户老代码零改动
  3. 详见《对象映射 MapTo / MMapper 完整指南》

2023-11-12 — 3.2.6.3

1. 链式语法增加 Select 方法,支持查询时按需挑字段:

ORM.Build<T>()
    .Get(it => it.Where(o => o.Mark > 0))
    .Select(o => new { o.Id, o.Name, o.Age })
    .ToList();

2. 增加 SqlBulk 批处理

DataTable:

ORM.Build<T>().BulkCopy(dataTable);

List<T>:

var list = new List<T>();
ORM.Build<T>().BulkCopy(list, o => new { o.Id, o.Name, o.Age });
// 必须指定导入的字段

2022-11-04 — 3.2.2.5

1. 新增 V3 链式语法初始化

// 旧
new ORMFactory<T>();

// 新
ORM.Build<T>();

2. 增强 RunProc / RunSql:放开必须传自定义 Model 的限制,支持元组与 dynamic:

// 动态类型
ORM.Build<dynamic>(context).RunSql("select * from t_User").ToList();

// 元组
ORM.Build<(int Id, string Name)>(context)
    .RunSql("select Id, Name from t_User")
    .ToList();

3. 增加 AutoMapper 功能(已被 3.3.2.5 替换为 MMapper)

NT newData = data.MapTo<T, NT>();

2022-10-25 — 3.2.0.8

新增大于、小于智能动态拼接:DynamicGreaterThan / DynamicLessThan

// !=null:where Mark > 0 and Age > 20
// ==null:where Mark > 0
ORM.Get<T>(it => it.Where(o => o.Mark > 0 && o.Age.DynamicGreaterThan(20)));

// !=null:where Mark > 0 and Age < 20
// ==null:where Mark > 0
ORM.Get<T>(it => it.Where(o => o.Mark > 0 && o.Age.DynamicLessThan(20)));

2022-10-22 — 3.2.0.3

1. 新增智能动态拼接DynamicIn / DynamicLike / DynamicEquals,传入值为 null 时自动忽略对应条件

// In
ORM.Get<T>(it => it.Where(o => o.Mark > 0 && o.Mobile.DynamicIn("111,222,333")));

// Like
ORM.Get<T>(it => it.Where(o => o.Mark > 0 && o.Mobile.DynamicLike("13666666666")));

// Equals
ORM.Get<T>(it => it.Where(o => o.Mark > 0 && o.Mobile.DynamicEquals("13666666666")));

2. MPageData 字段重命名total / rowsTotalNumber / Data

3. OData 写法替换为 Dynamic 写法

2022-10-12

  1. 链式语法支持动态切换数据库或服务器
  2. 链式语法支持动态解析自定义查询字段

2022-10-08 — 3.2.0.0

新增链式语法。静态方法的多参数堆叠在大量场景下不够直观,因此引入流式 API,让组合更自由。

2019

新增 Lambda 动态拼接,替代旧的 GetWhere 写法:

expc.Add(it => it.Where(o => o.String1 == name));
expc.Add(it => it.Where(o => o.String2 == name));

2017 ~ 2018

陆续集成 Memcached、Redis、RabbitMQ、Ocelot、Consul 等主流组件。

2016 ~ 2017

经历了双十一、年末酬宾等大型节日的抢购与秒杀活动,期间不断完善读写分离、分表分库等能力。

2015-11 ~ 2016-01

用遍市面上的主流开源 ORM,各有优缺点。为了适应互联网快速发展期,基于 Dapper 打造了适合快速开发的 OrangeCloud.ORM。