MT.LightORM 是一款极致轻量的 .NET ORM 工具,核心设计理念是零依赖、高效率、易使用。它专注于做好一件事:将 Expression 表达式树解析为 SQL 语句,不包含任何复杂的数据映射或状态管理逻辑。
⚡ 核心优势:无任何第三方依赖,纯.NET标准库实现,即插即用
- 零依赖:核心库不依赖任何第三方组件
- 按需使用:仅解析表达式树,不涉及数据映射、变更追踪等重量级功能
- 性能优异:表达式树动态编译,运行时无反射开销
// 三步完成配置services.AddLightOrm(option =>{option.UseSqlite("DataSource=test.db")// 选择数据库.SetTableContext(newTestTableContext())// 设置实体上下文.SetWatcher(aop =>aop.DbLog=(sql,p)=>Console.WriteLine(sql));// 开启日志});// 或直接使用IExpressionContextDb=ExpSqlFactory.GetContext();| 功能特性 | 支持情况 | 说明 |
|---|---|---|
| 基础CRUD | ✅ | 单表/多表操作 |
| 复杂查询 | ✅ | Join/Union/子查询/CTE |
| 导航属性 | ✅ | Include/Any自动处理关联 |
| JSON列 | ✅ | 支持JSON序列化/反序列化 |
| 窗口函数 | ✅ | RowNumber/Lag/Rank等 |
| 批量操作 | ✅ | 批量插入/更新 |
| 仓储模式 | ✅ | 提供泛型仓储接口 |
| LINQ支持 | ✅ | 完整的LINQ表达式支持 |
使用源生成器自动收集实体信息,避免运行时反射:
[LightORMTableContext]publicpartialclassTestTableContext{// 自动生成实体映射代码}vardb=ExpSqlFactory.GetContext();// 基础查询varproducts=db.Select<Product>().Where(p =>p.ModifyTime>DateTime.Now).ToSql(p =>new{p.ProductId,p.ProductName});// 多表Joinvarusers=db.Select<User>().InnerJoin<UserRole>(w =>w.Tb1.UserId==w.Tb2.UserId).InnerJoin<Role>(w =>w.Tb2.RoleId==w.Tb3.RoleId).Where(u =>u.UserId=="admin").ToList();// 导航属性查询varadmins=db.Select<User>().Where(u =>u.UserRoles.Any(r =>r.RoleId.Contains("admin"))).ToList();// 子查询varsubQuery=db.Select<User>().GroupBy(u =>u.UserId).AsTable(g =>new{g.Group.UserId,Total=g.Count()}).AsSubQuery().Where(t =>t.UserId.Contains("admin"));// 配置JSON处理器option.ConfigJsonHandler<JsonHandler>();// 查询JSON字段varresult=db.Select<JsonTestModel>().Where(j =>j.Json!.NestJson!.Name=="test").ToList();// 更新JSON字段db.Update<JsonTestModel>().Set(j =>j.Json!.NestJson!.Name,"test").Where(j =>j.Id==5).Execute();vartemp=db.Select<User>().GroupBy(u =>new{u.UserId}).AsTemp("us", g =>new{g.Group.UserId,Total=g.Count()});varresult=db.Select<Role>().WithTempQuery(temp).Where((r,u)=>r.RoleId==u.UserId).ToList();publicclassUserService{privatereadonlyILightOrmRepository<User>_userRepo;publicUserService(ILightOrmRepository<User>userRepo){_userRepo=userRepo;}publicasyncTask<List<User>>GetAdults(){returnawait_userRepo.Table.Where(u =>u.Age>=18).ToListAsync();}}# 核心库
dotnet add package MT.LightORM
# 选择数据库驱动(以SQLite为例)
dotnet add package LightORM.Providers.Sqlite- 微服务:轻量级,适合服务拆分
- 中小型项目:快速开发,简单配置
- 工具类应用:无需复杂ORM功能
欢迎提交 Issue 和 PR!