Skip to content

Repository files navigation

MT.LightORM - 轻量级.NET ORM工具

MIT LicenseNuGet

🌟 项目简介

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列支持

// 配置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();

CTE(公用表表达式)示例

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();}}

📊 支持的数据库

数据库NuGet包版本
SQLiteLightORM.Providers.SqliteNuGet
MySQLLightORM.Providers.MySqlNuGet
OracleLightORM.Providers.OracleNuGet
SQL ServerLightORM.Providers.SqlServerNuGet
PostgreSQLLightORM.Providers.PostgreSQLNuGet
DamengLightORM.Providers.DamengNuGet

📦 安装

# 核心库
dotnet add package MT.LightORM
# 选择数据库驱动(以SQLite为例)
dotnet add package LightORM.Providers.Sqlite

📖 详细文档

🎯 适用场景

  • 微服务:轻量级,适合服务拆分
  • 中小型项目:快速开发,简单配置
  • 工具类应用:无需复杂ORM功能

🤝 参与贡献

欢迎提交 Issue 和 PR!

📄 开源协议

MIT License

About

a simple, lightweight, and easy-to-use Object-Relational Mapping/ORM toolkit

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages