Core.ORM.MySql 2.0.23

There is a newer version of this package available.
See the version list below for details.
dotnet add package Core.ORM.MySql --version 2.0.23
                    
NuGet\Install-Package Core.ORM.MySql -Version 2.0.23
                    
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="Core.ORM.MySql" Version="2.0.23" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Core.ORM.MySql" Version="2.0.23" />
                    
Directory.Packages.props
<PackageReference Include="Core.ORM.MySql" />
                    
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 Core.ORM.MySql --version 2.0.23
                    
#r "nuget: Core.ORM.MySql, 2.0.23"
                    
#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 Core.ORM.MySql@2.0.23
                    
#: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=Core.ORM.MySql&version=2.0.23
                    
Install as a Cake Addin
#tool nuget:?package=Core.ORM.MySql&version=2.0.23
                    
Install as a Cake Tool

Core.ORM - 高性能 .NET ORM 框架

forked from ThingsGateway/TORM

License NuGet .NET



TORM - 高性能 .NET ORM 框架

License NuGet .NET

轻量级、高性能、功能丰富的对象关系映射框架

ThingsGateway 生态系统中的 ORM 组件,专为高性能场景设计。


中文

📖 项目简介

TORM 是一个为 .NET 平台设计的轻量级、高性能 ORM(对象关系映射)框架。它提供了简洁流畅的 API,支持多种数据库,并针对高性能场景进行了深度优化。

✨ 核心特性

🚀 高性能设计
  • AOT:支持AOT编译
  • 表达式树解析:高效的 LINQ 表达式到 SQL 转换
  • 批量操作优化:支持 BulkCopy 高性能批量插入/更新
🗄️ 多数据库支持
数据库 支持状态
MySQL ✅ 完全支持
SQL Server ✅ 完全支持
PostgreSQL ✅ 完全支持
SQLite ✅ 完全支持
TDengine 暂无映射功能,修改自官方驱动库(原生 + WebSocket),完善AOT支持,可自定义ADO.NET操作
💡 丰富的功能

基础 CRUD 操作

高级功能

  • 🔹 Code First:自动创建/更新数据库表结构
  • 🔹 分表分库:支持时间分表、数量分表策略
  • 🔹 批量操作:BulkCopy 高性能批量导入
  • 🔹 事务管理:支持同步/异步事务
  • 🔹 AOP 拦截:SQL 执行前后拦截,日志记录
  • 🔹 JSON 支持:原生 JSON 类型支持

📊 性能测试

TORM 与国内主流 ORM 框架 的Sqlite性能对比测试结果:


BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8037/25H2/2025Update/HudsonValley2)
Intel Core Ultra 9 285H 2.90GHz, 1 CPU, 16 logical and 16 physical cores
.NET SDK 10.0.103
  [Host]    : .NET 10.0.3 (10.0.3, 10.0.326.7603), X64 RyuJIT x86-64-v3
  .NET 10.0 : .NET 10.0.3 (10.0.3, 10.0.326.7603), X64 RyuJIT x86-64-v3

Job=.NET 10.0  Runtime=.NET 10.0  

Method Mean Error StdDev Median Ratio RatioSD Gen0 Gen1 Gen2 Allocated Alloc Ratio
TORM_BulkInsert_10000 29,483.870 μs 564.6185 μs 554.5309 μs 29,662.345 μs 1.00 0.03 1062.5000 - - 13392.2 KB 1.00
SqlSugar_BulkInsert_10000 54,989.997 μs 1,048.1157 μs 1,076.3376 μs 55,272.167 μs 1.00 0.03 2833.3333 1000.0000 166.6667 34263.76 KB 1.00
FreeSql_BulkInsert_10000 537,387.137 μs 14,137.7720 μs 41,240.5475 μs 553,427.500 μs 1.01 0.12 5000.0000 1000.0000 - 64690.97 KB 1.00
TORM_BulkInsert_50000 156,769.159 μs 1,091.2339 μs 967.3505 μs 156,778.888 μs 1.00 0.01 5250.0000 - - 66934.26 KB 1.00
SqlSugar_BulkInsert_50000 268,856.227 μs 3,064.4750 μs 2,866.5118 μs 269,124.600 μs 1.00 0.01 14000.0000 4000.0000 1000.0000 168710.47 KB 1.00
FreeSql_BulkInsert_50000 2,791,199.208 μs 55,809.9648 μs 97,746.6592 μs 2,802,945.200 μs 1.00 0.05 26000.0000 1000.0000 - 323409.88 KB 1.00
TORM_BulkUpdate_50000 99,459.911 μs 967.6688 μs 905.1580 μs 99,733.850 μs 1.00 0.01 5333.3333 - - 66933.79 KB 1.00
SqlSugar_BulkUpdate_50000 182,485.632 μs 2,967.7149 μs 2,630.8020 μs 182,848.775 μs 1.00 0.02 14500.0000 4000.0000 1500.0000 168710.39 KB 1.00
FreeSql_BulkUpdate_50000 2,588,248.118 μs 51,038.1952 μs 52,412.4689 μs 2,598,517.600 μs 1.00 0.03 42000.0000 1000.0000 - 521759.37 KB 1.00
TORM_DeleteBatch_10000 7.996 μs 0.0541 μs 0.0480 μs 8.006 μs 1.00 0.01 0.1831 - - 2.4 KB 1.00
SqlSugar_DeleteBatch_10000 69.195 μs 1.0972 μs 1.0263 μs 69.525 μs 1.00 0.02 0.9155 - - 11.49 KB 1.00
FreeSql_DeleteBatch_10000 65.489 μs 0.5363 μs 0.4754 μs 65.528 μs 1.00 0.01 0.5493 - - 7.01 KB 1.00
TORM_GetList 9.035 μs 0.0527 μs 0.0493 μs 9.045 μs 1.00 0.01 0.5035 - - 6.2 KB 1.00
SqlSugar_GetList 90.299 μs 1.7914 μs 3.6995 μs 90.835 μs 1.00 0.07 2.0752 0.9766 - 25.61 KB 1.00
FreeSql_GetList 66.647 μs 1.3142 μs 2.2316 μs 67.329 μs 1.00 0.05 0.8545 0.7935 - 10.76 KB 1.00
TORM_InsertBatch_10000 29,821.968 μs 117.4661 μs 104.1306 μs 29,839.409 μs 1.00 0.00 1062.5000 - - 13391.97 KB 1.00
SqlSugar_InsertBatch_10000 119,720.489 μs 1,983.6632 μs 1,758.4657 μs 119,777.158 μs 1.00 0.02 6500.0000 3166.6667 1000.0000 72158.74 KB 1.00
FreeSql_InsertBatch_10000 562,874.180 μs 3,067.5205 μs 2,869.3606 μs 562,098.900 μs 1.00 0.01 5000.0000 1000.0000 - 64691.03 KB 1.00
TORM_InsertBatch_50000 156,858.300 μs 1,981.4147 μs 1,756.4725 μs 156,255.650 μs 1.00 0.02 5000.0000 - - 66934.18 KB 1.00
SqlSugar_InsertBatch_50000 587,029.233 μs 8,298.3128 μs 6,478.7768 μs 587,832.350 μs 1.00 0.02 28000.0000 13000.0000 2000.0000 343406.52 KB 1.00
FreeSql_InsertBatch_50000 2,743,381.907 μs 22,418.0622 μs 19,873.0282 μs 2,748,549.050 μs 1.00 0.01 26000.0000 1000.0000 - 323409.86 KB 1.00
TORM_SaveBatchUpsert_1000 2,488.677 μs 13.5737 μs 11.3346 μs 2,487.567 μs 1.00 0.01 109.3750 - - 1361.35 KB 1.00
TORM_SaveBatch_1000 3,214.556 μs 52.0409 μs 48.6791 μs 3,198.125 μs 1.00 0.02 156.2500 15.6250 - 2098.54 KB 1.00
SqlSugar_SaveBatch_1000 116,875.679 μs 2,299.9455 μs 2,361.8747 μs 116,837.275 μs 1.00 0.03 7500.0000 1000.0000 - 96188.28 KB 1.00
FreeSql_SaveBatch_1000 6,921.216 μs 136.1796 μs 127.3824 μs 6,879.202 μs 1.00 0.03 234.3750 117.1875 70.3125 2566.44 KB 1.00
TORM_SaveBulk_50000 130,866.535 μs 2,607.0517 μs 7,003.6756 μs 132,598.750 μs 1.00 0.08 5500.0000 - - 67716.66 KB 1.00
SqlSugar_SaveBulk_50000 6,335,388.058 μs 124,308.3524 μs 170,154.6902 μs 6,390,547.400 μs 1.00 0.04 712000.0000 60000.0000 9000.0000 8634677.2 KB 1.00
FreeSql_SaveBulk_50000 199,689.818 μs 3,965.4261 μs 11,184.5554 μs 202,523.525 μs 1.00 0.08 8500.0000 2000.0000 500.0000 129874.98 KB 1.00
TORM_UpdateBatch_1000 2,059.663 μs 13.8345 μs 12.9408 μs 2,055.851 μs 1.00 0.01 109.3750 - - 1344.37 KB 1.00
SqlSugar_UpdateBatch_1000 53,523.906 μs 1,172.7374 μs 3,364.8036 μs 54,097.327 μs 1.01 0.11 909.0909 727.2727 181.8182 11012.93 KB 1.00
FreeSql_UpdateBatch_1000 53,324.506 μs 650.2690 μs 608.2620 μs 53,067.340 μs 1.00 0.02 800.0000 200.0000 - 10461.04 KB 1.00

可以看出,TORM无论是速度还是内存占用都表现优异,得益于TORM是一个没有任何历史包袱的项目,其高性能设计和批量操作优化,在大数据量场景下表现尤为突出。

注:实际性能因数据库类型、数据量、硬件配置等因素会有所不同。建议在实际项目环境中进行测试。

运行性能测试
cd benchmark/TORM.Benchmark
dotnet run -c Release

🚀 快速开始

安装 NuGet 包
dotnet add package TORM
基础配置
using TORM;

// 创建 ORM 客户端
using var ormClient = new OrmClient(new OrmConnectionConfig
{
    DatabaseType = OrmDbType.MySql,
    ConnectionString = "Server=localhost;Database=test;Uid=root;Pwd=password;"
});
定义实体
[OrmTable(TableName = "users")]
public class User
{
    [OrmColumn(IsPrimaryKey = true, IsIdentity = true)]
    public long Id { get; set; }
    
    [OrmColumn(ColumnName = "user_name", Length = 50)]
    public string Name { get; set; }
    
    public int Age { get; set; }
    
    public DateTime CreateTime { get; set; }
}
Code First 自动建表
// 自动创建表结构
await ormClient.CodeFirst.InitTableAsync<User>();

📚 功能详解

查询操作
// 基础查询
var list = await ormClient.Queryable<User>().ToListAsync();

// 条件查询
var adults = await ormClient.Queryable<User>()
    .Where(u => u.Age >= 18)
    .ToListAsync();

// 分页查询(返回 PagedList<T>,包含总数)
var page = await ormClient.Queryable<User>()
    .Where(u => u.IsActive)
    .OrderByDescending(u => u.CreateTime)
    .ToPageListAsync(pageNumber: 1, pageSize: 20);

// 聚合查询
var count = await ormClient.Queryable<User>().CountAsync();
var exists = await ormClient.Queryable<User>().AnyAsync();

// 投影查询
var names = await ormClient.Queryable<User>()
    .Select(u => new { u.Id, u.Name })
    .ToListAsync();

// 流式查询(大数据量场景)
await foreach (var user in ormClient.Queryable<User>().ToAsyncEnumerable())
{
    // 逐行处理
}
批量操作
// 批量插入(高性能)
await ormClient.InsertableRange(users).ExecuteAsync();

// BulkCopy 批量导入(最高性能)
await ormClient.BulkCopy<User>().BulkInsertAsync(users);

// 批量更新
await ormClient.BulkCopy<User>().BulkUpdateAsync(users);

// 批量保存(自动判断插入/更新)
await ormClient.BulkCopy<User>().BulkMergeAsync(users);
分表操作

定义分表实体:

// 按月分表:表名后缀格式 _yyyyMM
[OrmTable(TableName = "logs", SplitType = SplitTableType.Month, SplitColumn = nameof(CreateTime))]
public class Log
{
    [OrmColumn(IsPrimaryKey = true, IsIdentity = true)]
    public long Id { get; set; }
    
    public string Message { get; set; }
    
    // 分表依据列(必须为 DateTime 类型)
    public DateTime CreateTime { get; set; }
}

// 按记录数分表:每 10000 条自动创建新表
[OrmTable(TableName = "sensor_data", MaxRowCount = 10000)]
public class SensorData
{
    [OrmColumn(IsPrimaryKey = true, IsIdentity = true)]
    public long Id { get; set; }
    
    public double Value { get; set; }
}

// 混合策略:按月分表 + 每月内按记录数分表
[OrmTable(TableName = "events", 
    SplitType = SplitTableType.Month, 
    SplitColumn = nameof(EventTime),
    MaxRowCount = 50000)]
public class Event
{
    [OrmColumn(IsPrimaryKey = true, IsIdentity = true)]
    public long Id { get; set; }
    
    public DateTime EventTime { get; set; }
}

分表操作示例:

// 分表查询(自动跨所有分表查询,可指定时间范围)
var list = await ormClient.SplitQueryableAsync<Log>(
    query => query.Where(l => l.Message.Contains("error")),
    startTime: DateTime.Now.AddDays(-30),
    endTime: DateTime.Now
);

// 分表插入(自动路由到正确的分表)
await ormClient.SplitInsertableAsync(logs);

// 分表更新
await ormClient.SplitUpdateableAsync(logs, update => update.Set(l => l.Message, "updated"));

// 分表删除
await ormClient.SplitDeleteableAsync(logs);

分表类型说明:

SplitTableType 说明 表名后缀格式
None 不分表(默认) -
Week 按周分表 _yyyyMMdd(周一日期)
Month 按月分表 _yyyyMM
Quarter 按季度分表 _yyyyQn
Year 按年分表 _yyyy
事务管理
await db.UseTranAsync(async () =>
{
    await db.InsertableRange(addModels).ExecuteAsync().ConfigureAwait(false);
}).ConfigureAwait(false);
AOP 日志拦截
// SQL执行前日志
ormClient.Aop.OnLogExecuting = (sql, parameters) =>
{
    Console.WriteLine($"执行SQL: {sql}");
};

// SQL执行后日志
ormClient.Aop.OnLogExecuted = (sql, parameters, elapsed) =>
{
    Console.WriteLine($"SQL执行耗时: {elapsed.TotalMilliseconds}ms");
};

// 插入/更新前修改值
ormClient.Aop.OnDataExecuting = (args) =>
{
    if (args.DataExecutingType == DataExecutingType.Insert)
    {
        // 自动填充创建时间
        if (args.Entity is BaseEntity entity)
        {
            entity.CreateTime = DateTime.Now;
        }
    }
};

🏗️ 项目结构

TORM/
├── src/TORM/                    # 核心库
│   ├── Ado/                     # ADO.NET 基础设施
│   ├── Aop/                     # AOP 拦截器
│   ├── Attributes/              # 实体特性
│   ├── BulkCopy/                # 批量操作
│   ├── Client/                  # ORM 客户端
│   ├── CodeFirst/               # Code First
│   ├── Queryable/               # 查询提供器
│   ├── Insertable/              # 插入提供器
│   ├── Updateable/              # 更新提供器
│   ├── Deletable/               # 删除提供器
│   ├── Saveable/                # 保存提供器
│   ├── SplitTable/              # 分表支持
│   ├── Sql/                     # SQL 构建
│   └── TaosData/                # TDengine 支持
│       ├── Driver/              # TDengine 驱动
│       └── TMQ/                 # TMQ 消息队列
├── benchmark/TORM.Benchmark/    # 性能测试
└── test/TORM.Test/              # 单元测试

📄 开源协议

本项目基于 Apache 2.0 协议开源。

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.28 0 5/14/2026
2.0.27.1 0 5/14/2026
2.0.27 0 5/14/2026
2.0.26.2 27 5/13/2026
2.0.26.1 25 5/13/2026
2.0.26 33 5/13/2026
2.0.24 31 5/12/2026
2.0.23 83 5/11/2026