LiteOrm 是一个轻量级、高性能的 .NET ORM 框架,结合了微ORM的速度和全ORM的功能性,适用于需要灵活处理SQL查询并且注重性能的场景。
Lambda、Expr、ExprString 三种查询方式。SqlBuilder 扩展自定义数据库能力。| 方案 | 更擅长的方向 |
|---|---|
| EF Core | 迁移、完整生态、约定优先 |
| Dapper | 极简、手写 SQL,最薄抽象 |
| LiteOrm | 性能、表达式扩展、自动关联、灵活 SQL 控制 |
LiteOrm 项目采用模块化设计,清晰地分离了核心功能、公共组件、示例和测试代码。项目结构组织合理,便于维护和扩展。
├── LiteOrm/ # 核心库
│ ├── Classes/ # 核心类
│ ├── Converter/ # 转换器
│ ├── DAO/ # 数据访问对象
│ ├── DAOContext/ # 数据访问上下文
│ ├── DbAccess/ # 数据库访问
│ ├── Initilizer/ # 初始化器
│ ├── Service/ # 服务层
│ └── SqlBuilder/ # SQL构建器
├── LiteOrm.Common/ # 公共组件
│ ├── Attributes/ # 特性
│ ├── Classes/ # 公共类
│ ├── Converter/ # 公共转换器
│ ├── Expr/ # 表达式
│ ├── MetaData/ # 元数据
│ ├── Model/ # 模型
│ ├── Service/ # 公共服务
│ ├── SqlBuilder/ # 公共SQL构建器
│ └── SqlSegment/ # SQL片段
├── LiteOrm.Demo/ # 示例项目
│ ├── DAO/ # 示例DAO
│ ├── Data/ # 示例数据
│ ├── Demos/ # 示例代码
│ ├── Models/ # 示例模型
│ └── Services/ # 示例服务
├── LiteOrm.Tests/ # 测试项目
│ ├── Attributes/ # 特性测试
│ ├── Classes/ # 类测试
│ ├── Converter/ # 转换器测试
│ ├── Expr/ # 表达式测试
│ ├── Infrastructure/ # 测试基础设施
│ ├── MetaData/ # 元数据测试
│ ├── Models/ # 测试模型
│ └── Service/ # 服务测试
├── LiteOrm.Benchmark/ # 性能基准测试
└── docs/ # 文档
├── 01-getting-started/ # 入门指南
├── 02-core-usage/ # 核心使用
├── 03-advanced-topics/ # 高级主题
├── 04-extensibility/ # 扩展性
└── 05-reference/ # 参考
核心模块职责:
| 模块 | 主要职责 | 文件位置 |
|---|---|---|
| DAO | 数据访问操作 | LiteOrm/DAO/ |
| Service | 业务服务 | LiteOrm/Service/ |
| SqlBuilder | SQL语句构建 | LiteOrm/SqlBuilder/ |
| Expr | 查询表达式 | LiteOrm.Common/Expr/ |
| Attributes | 实体映射特性 | LiteOrm.Common/Attributes/ |
| MetaData | 元数据管理 | LiteOrm.Common/MetaData/ |
LiteOrm 采用分层架构设计,清晰地分离了数据访问、业务逻辑和表示层。系统架构遵循依赖倒置原则,通过接口实现各层之间的解耦。
graph TD
A[应用代码]
B[Service层]
B -->|使用| C[DAO层]
E[DAOContext] -->|创建| J[DbCommandProxy]
F[数据库] -->|读取| K[AutoLockDataReader]
J -->|构建| K
K -->|转换| L[实体对象]
A -->|构建查询| G1[Lambda表达式]
A -->|构建查询| G2[Expr表达式]
A -->|构建查询| G3[ExprString]
G1 -->|转换为| G2
G2 -->|构建| G3
G2 -->|传递| B
G2 -->|传递| C
G3 -->|传递| C
C -->|使用| D[SqlBuilder]
D -->|构建SQL| H[SQL语句]
H -->|设置| J
B -->|事务管理| I[SessionManager]
I -->|控制| E
P[DAOContextPool] -->|提供| E
K -->|释放| E
主要流程说明:
RegisterLiteOrm()注册服务并切换到 Autofac 容器Search 的条件片段或完整 SQL[Transaction]属性标记需要事务的方法DAO层是LiteOrm的核心,提供了直接的数据访问操作。它包括多个实现类,针对不同的数据访问场景。
主要组件:
核心功能:
Service层封装了业务逻辑,提供了更高级的操作接口。它基于DAO层构建,增加了事务管理和业务规则。
主要组件:
核心功能:
表达式系统是LiteOrm的特色功能,提供了强大的查询构建能力。它覆盖三类常见查询入口:Lambda表达式、Expr对象,以及仅供 DAO 使用的 ExprString。
主要组件:
核心功能:
SQL构建器负责根据表达式生成针对不同数据库的优化SQL语句。它支持多种数据库类型,提供了数据库特定的语法和函数支持。
主要组件:
核心功能:
元数据管理负责处理实体类型与数据库表之间的映射关系。它通过特性系统构建元数据,为DAO和SQL构建器提供必要的信息。
主要组件:
核心功能:
LiteOrm提供了声明式事务管理,通过[Transaction]属性标记需要事务的方法。事务管理由SessionManager负责,确保多个操作在同一事务中执行。
核心功能:
功能:所有DAO的抽象基类,提供通用操作方法
主要方法:
NewCommand():创建数据库命令MakeNamedParamCommand():创建带参数的命令MakeExprCommand():根据表达式创建命令GetValue<T>():执行查询并返回单个值Execute():执行非查询SQLQuery<TResult>():执行查询并返回结果集使用场景:作为DAO的基类,提供通用功能
功能:处理实体对象的CRUD操作
主要方法:
Insert():插入实体Update():更新实体Delete():删除实体DeleteByKeys():根据主键删除Search():查询实体BatchInsert():批量插入BatchUpdate():批量更新BatchDelete():批量删除使用场景:直接操作实体对象,执行CRUD操作
功能:数据库命令代理,封装了DbCommand,提供参数处理和执行功能,结合AutoLockDataReader实现事务、异步锁管理。
主要方法:
CreateParameter():创建数据库参数ExecuteNonQuery():执行非查询命令ExecuteReader():执行查询并返回数据读取器ExecuteScalar():执行查询并返回单个值使用场景:封装数据库命令,处理参数和执行操作
功能:自动锁定的数据读取器,确保数据读取过程中的线程安全
主要方法:
Read():读取下一条记录GetValue():获取指定列的值GetInt32()/GetString()/等:获取指定类型的值Dispose():释放资源使用场景:安全地读取数据库查询结果
功能:提供实体的完整业务操作
主要方法:
Insert():插入实体Update():更新实体Delete():删除实体BatchInsert():批量插入BatchUpdate():批量更新BatchDelete():批量删除Search():查询实体SearchOne():查询单个实体SearchAsync():异步查询使用场景:在业务逻辑层使用,提供完整的实体操作
功能:专注于查询操作的服务
主要方法:
Search():查询实体SearchOne():查询单个实体SearchAsync():异步查询Count():统计记录数使用场景:仅需要查询功能的场景
功能:表达式基类,提供查询构建能力
主要方法:
Prop():创建属性表达式Exists<T>():创建存在性子查询From<T>():创建从表开始的查询ToPreparedSql():转换为带参数的SQL语句使用场景:构建复杂的查询条件
功能:逻辑表达式,用于构建WHERE条件
主要操作符:
&:AND操作|:OR操作!:NOT操作使用场景:构建复杂的逻辑条件
功能:SQL构建器基类,提供SQL生成功能
主要方法:
ToSqlName():转换为SQL名称ToSqlParam():转换为SQL参数ConvertToDbValue():转换为数据库值ConvertFromDbValue():从数据库值转换BuildSelectSql():构建SELECT语句BuildFunctionSql():构建函数SQL语句使用场景:生成数据库特定的SQL语句
功能:表示数据库表的元数据
主要属性:
Name:表名Columns:列集合Keys:主键列Definition:表定义使用场景:提供表的元数据信息
功能:提供表信息的提供者
主要方法:
GetTable():获取表信息GetColumn():获取列信息使用场景:构建和管理表的元数据
| 技术/依赖 | 版本 | 用途 |
|---|---|---|
| .NET | 8.0+ | 运行环境 |
| .NET Standard | 2.0+ | 跨平台支持 |
| Autofac.Extensions.DependencyInjection | 10.0.0 | Autofac 容器与 RegisterLiteOrm() 的宿主集成 |
| Autofac.Extras.DynamicProxy | 7.1.0 | Autofac 拦截支持 |
| Microsoft.Extensions.DependencyInjection | 10.0.0 | DI 抽象与 ServiceCollection 生态 |
| Castle.Core | 5.2.1 | 动态代理核心 |
| Castle.Core.AsyncInterceptor | 2.1.0 | 异步拦截器 |
| Microsoft.Extensions.Hosting.Abstractions | 10.0.5 | 主机抽象 |
| Microsoft.Extensions.Logging.Abstractions | 10.0.5 | 日志抽象 |
| System.Text.Json | 10.0.5 | JSON处理 |
数据库支持: