ToolGood.ReadyGo
5.0.26
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package ToolGood.ReadyGo --version 5.0.26
NuGet\Install-Package ToolGood.ReadyGo -Version 5.0.26
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="ToolGood.ReadyGo" Version="5.0.26" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ToolGood.ReadyGo" Version="5.0.26" />
<PackageReference Include="ToolGood.ReadyGo" />
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 ToolGood.ReadyGo --version 5.0.26
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: ToolGood.ReadyGo, 5.0.26"
#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 ToolGood.ReadyGo@5.0.26
#: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=ToolGood.ReadyGo&version=5.0.26
#tool nuget:?package=ToolGood.ReadyGo&version=5.0.26
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
ToolGood.ReadyGo
ToolGood.ReadyGo 是一款轻量级高性能 Micro-ORM,基于 NPoco 核心修改,汇聚作者多年经验,简单、快捷,能增加代码的可读性。支持 SqlServer、MySql、SQLite、PostgreSQL、Oracle、Firebird 等数据库。
特性
- 链式动态查询:
Where<T>()支持表达式、IfTrue*条件开关、WhereIn/WhereLike/WhereExists等扩展 - 批量更新与删除:
UpdateMany<T>()/DeleteMany<T>()链式操作 - 快照局部更新:
StartSnapshot记录对象变更,只更新变更的列 - 简化 SQL:省去
SELECT * FROM前缀,直接写条件 - 完整异步 API:所有核心操作均提供
_Async版本 - 支持对象条件查询、分页、多结果集、一对多映射
- SQL 执行监控
支持框架与数据库
- 框架:.NET 8.0 / 9.0 / 10.0
- 数据库:SqlServer、MySql、SQLite、PostgreSQL、Oracle、Firebird、DuckDb、Access
安装
dotnet add package ToolGood.ReadyGo
快速开始
using ToolGood.ReadyGo;
// 1. 创建连接
var helper = SqlHelperFactory.OpenMsSqliteFile("test.db");
// 2. 建表(表不存在时创建)
helper._TableHelper.TryCreateTable(typeof(User));
// 3. 插入
helper.Insert(new User { Name = "Ted", Age = 21 });
// 4. 链式查询
var users = helper.Where<User>()
.Where(x => x.Age > 18)
.OrderBy(x => x.Name)
.ToList();
// 5. 分页(SelectPage 为 ToPage 别名)
var page = helper.Where<User>().OrderBy(x => x.Age).SelectPage(1, 10);
// 6. 异步查询
var asyncList = await helper.Where<User>(x => x.Age > 18).ToList_Async();
数据库连接工厂
var helper = SqlHelperFactory.OpenDatabase(connectionString, "MySql.Data.MySqlClient", SqlType.MySql);
var helper = SqlHelperFactory.OpenSqlServer(server, database, user, pwd);
var helper = SqlHelperFactory.OpenMysql(server, database, user, pwd);
var helper = SqlHelperFactory.OpenOracle(server, port, serviceName, user, pwd);
var helper = SqlHelperFactory.OpenSqliteFile(filePath); // System.Data.SQLite 驱动
var helper = SqlHelperFactory.OpenMsSqliteFile(filePath, pwd); // Microsoft.Data.Sqlite 驱动(支持密码)
var helper = SqlHelperFactory.OpenDuckDbFile(filePath);
var helper = SqlHelperFactory.OpenAccessFile(filePath); // 32 位
数据表操作
var table = helper._TableHelper;
table.TryCreateTable(typeof(User)); // 表不存在则创建
table.CreateTable(typeof(User)); // 创建表
table.CreateTableIndex(typeof(User)); // 创建索引
table.DropTable(typeof(User)); // 删除表
table.TruncateTable(typeof(User)); // 清空表
数据增删改
helper.Insert(u);
helper.Update(u);
helper.Save(u); // 存在则更新,否则插入
helper.Delete(u);
helper.DeleteById<User>(1);
helper.UpdateList(list); // 批量更新(按主键)
helper.SaveList(list); // 批量保存:新对象插入,已存在更新
helper.InsertList(list); // 批量插入
helper.Update<User>("Set [Name]=@0 WHERE [Id]=@1", "Test", 1);
helper.Delete<User>("WHERE [Id]=@0", 1);
使用事务
using (var tran = helper.UseTransaction()) {
...
tran.Complete(); // 提交事务;若不调用 Complete(),Dispose 时回滚
}
快照局部更新
var user = helper.FirstOrDefault<User>("Where Id=@0", 1); // Name = "Ted", Age = 21
var snapshot = helper.StartSnapshot(user); // 开始记录变更
user.Name = "Bobby";
helper.Update(user, snapshot); // 只更新变更的列
helper.Update(user, new[] { "Name" }); // 或指定列更新
动态查询(链式查询)
基本用法
helper.Where<User>() // 入口
.Where(x => x.Age > 18) // 表达式条件
.WhereSql("Name = @0", "Ted") // 原始 SQL 条件
.OrderBy(x => x.Name) // 排序
.Limit(10) // 取前 10 条
.ToList();
条件开关(IfTrue*,条件成立才追加)
public User FindUser(int userId, string userName)
{
return helper.Where<User>()
.IfTrueWhere(userId > 0, u => u.Id == userId)
.IfTrueWhere(userName != null, u => u.UserName == userName)
.FirstOrDefault();
}
方法清单
- 构建:
Where、WhereSql、OrderBy、OrderByDescending、Limit、SkipTake、Distinct - 执行:
ToList、First、Single、Count、Any、ToPage(别名SelectPage) - 常用扩展:
WhereIn、WhereNotIn、WhereLike、WhereLikeStart、WhereLikeEnd、WhereExists、WhereNotExists - 异步:上述执行方法均有
_Async版本(如ToList_Async、FirstOrDefault_Async)
批量更新与删除
helper.UpdateMany<User>()
.Where(x => x.Age > 30)
.ExcludeDefaults() // 跳过默认值字段
.OnlyFields(x => new { x.Vip }) // 只更新指定字段
.Execute(new User { Vip = true });
helper.DeleteMany<User>().Where(x => x.Age < 18).Execute();
object 条件查询
以对象为条件,属性为默认值时忽略该条件:
var user = helper.FirstOrDefault<User>(new { Id = 1 });
var users = helper.Select<User>(new { UserType = 1, State = true });
helper.Update<User>(new { NickName = "新昵称" }, new { Id = 1 }); // set 对象, 条件对象
helper.Delete<User>(new { Id = 1 });
var count = helper.Count<User>(new { UserType = 1 });
var exists = helper.Exists<User>(new { UserName = "Ted" });
原生 SQL 与简化 SQL
// 完整 SQL
var users = helper.Select<User>("SELECT * FROM Users WHERE [UserType]=@0", 1);
// 简化 SQL:可省略 "SELECT * FROM"
var users2 = helper.Select<User>("FROM Users WHERE [UserType]=@0", 1);
var users3 = helper.Select<User>("WHERE [UserType]=@0", 1);
// 分页
var page = helper.Page<User>(1, 20, "SELECT * FROM Users WHERE [UserType]=@0", 1);
// 多结果集 / 一对多
var (users, addresses) = helper.SelectMultiple<User, Address>(
"select * from users;select * from addresses;");
var userInfos = helper.SelectOneToMany<UserInfo>(x => x.Addresses, manySql);
异步 API
所有核心操作均提供 _Async 后缀版本,例如:
var users = await helper.Select_Async<User>("WHERE [UserType]=@0", 1);
await helper.Update_Async(user, snapshot); // 异步快照局部更新
var list = await helper.Where<User>().ToList_Async(); // 链式异步查询
SQL 执行监控
var sql = helper._Sql.LastSQL; // 上次 SQL 语句
var args = helper._Sql.LastArgs; // 上次 SQL 参数
var cmd = helper._Sql.LastCommand; // 上次 SQL(带参数格式化)
var err = helper._Sql.LastErrorMessage; // 上次错误信息
Attribute 映射
在 ToolGood.ReadyGo.Attributes 命名空间内:
Table:定义表名、schema 名、数据库名PrimaryKey:定义主键(默认自增),支持复合主键Column:定义列名与备注ResultColumn:定义返回列(只读,不参与 INSERT/UPDATE)Ignore:忽略该属性Required:定义非空列FieldLength:定义列长度(decimal 支持长度与小数位)Index/Unique:定义索引与唯一索引ExplicitColumns:所有列必须显式映射- 更多便捷特性(
Bool2String、DateTime2String、Enum2String等)参见完整文档
许可证
详见 License.txt。
| Product | Versions 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 is compatible. 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.
-
net10.0
- No dependencies.
-
net8.0
- System.Linq.AsyncEnumerable (>= 10.0.11)
-
net9.0
- System.Linq.AsyncEnumerable (>= 10.0.11)
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 |
|---|---|---|
| 6.0.2 | 0 | 8/27/2026 |
| 6.0.1 | 0 | 8/27/2026 |
| 6.0.0 | 0 | 8/27/2026 |
| 5.0.26 | 41 | 8/26/2026 |
| 5.0.25 | 57 | 8/25/2026 |
| 5.0.24 | 41 | 8/25/2026 |
| 5.0.23 | 49 | 8/25/2026 |
| 5.0.22 | 46 | 8/25/2026 |
| 5.0.21 | 48 | 8/25/2026 |
| 5.0.20 | 55 | 8/25/2026 |
| 5.0.19 | 55 | 8/24/2026 |
| 5.0.18 | 65 | 8/24/2026 |
| 5.0.17 | 62 | 8/24/2026 |
| 5.0.16 | 57 | 8/24/2026 |
| 5.0.14 | 59 | 8/24/2026 |
| 5.0.13 | 58 | 8/24/2026 |
| 5.0.12 | 58 | 8/24/2026 |
| 5.0.11 | 55 | 8/23/2026 |
| 5.0.10 | 60 | 8/23/2026 |
| 5.0.9 | 63 | 8/23/2026 |
Loading failed
支持 .NET 8/9/10,链式查询、批量更新/删除、异步查询接口。