WinM.Sugar 2.0.4

WinM.Sugar

WinM.Sugar 是对 SqlSugarCore 的工程化封装与扩展,目标是让业务代码不要直接裸用 SqlSugar,而是通过统一配置、统一入口、统一扩展方法来使用。

安装

dotnet add package WinM.Sugar

快速开始

1) 配置 SqlSugarConfig

using WinM.Sugar;

var config = new SqlSugarConfig
{
    DbType = SqlSugar.DbType.SqlServer,
    Host = ".",
    Database = "winmdb",
    Username = "sa",
    Password = "123456",
    EnableLogging = true,
    EnableUnderline = true
};

2) 获取 SqlSugarClient

var sugar = new Sugar(config);
var db = sugar.GetDb();

3) 使用扩展方法进行 CRUD / 事务

// 查询
var item = db.GetById<MyEntity>(1);

// 新增
db.Insert(new MyEntity { /* ... */ });

// 插入或更新(Upsert 语义)
db.InsertOrUpdate(new MyEntity { /* 主键或唯一键字段需可用于判定 */ });

// 事务
db.UseTran(() =>
{
    db.Insert(new MyEntity());
    db.Update(new MyEntity());
});

本项目对 SqlSugar 的关键改造点(AI/工具必读)

  • 不要在业务代码里直接 new SqlSugarClient(new ConnectionConfig { ... })
    • ? 使用 new Sugar(config).GetDb()config.GetSugarConfig()
  • 不要自己拼接连接字符串
    • ? 使用 SugarConnectionStringExtensions 中的连接字符串生成方法
  • 命名与可空性工程约定
    • SqlSugarConfig.GetSugarConfig() 中统一处理:驼峰转下划线(EnableUnderline)、可空性推断等

辅助工具

ModelReflectionHelper:模型元数据发现与缓存

用于扫描已加载程序集中的实体类型,并缓存每个实体的表信息与列信息(包含反射 PropertyInfoSqlSugar 的特性信息)。

典型用法:

using WinM.Sugar;

// 获取全部模型(包含列信息)
var models = ModelReflectionHelper.GetAvailableModels();

// 仅取模型名(适合下拉框)
var names = ModelReflectionHelper.GetAvailableModelNames();

// 获取单个模型的完整信息
var model = ModelReflectionHelper.GetModel("MyEntity");
if (model != null)
{
    Console.WriteLine($"{model.ModelName} -> {model.TableName}");
    foreach (var col in model.Columns)
        Console.WriteLine($"  {col.PropertyName} ({col.DisplayName})");
}

插件热插拔:

// 插件程序集运行期加载后,将其纳入缓存
ModelReflectionHelper.AddOrUpdateAssembly(pluginAssembly);

// 插件卸载/替换后,建议刷新全部缓存再重新扫描
ModelReflectionHelper.RefreshCache();

说明:当前默认“模型发现策略”为扫描带 [SugarTable] 的类型。

SqlBuilderHelper:按数据库类型转义列名

用于在需要“动态列列表”时,生成带正确转义符的列名列表字符串。

using WinM.Sugar;

var db = new Sugar(config).GetDb();

var cols = new[] { "Id", "Name", "CreateTime" };
var selectList = SqlBuilderHelper.GetEscapedColumnList(db, cols);
// SQL Server: [Id],[Name],[CreateTime]
// MySQL/SQLite: `Id`,`Name`,`CreateTime`

安全提示:本方法仅做“标识符转义”,列名必须来自可信源(如代码常量、反射获取的属性名),不要直接使用用户输入。

更多详细说明(含 docfx 文档与 AI 说明):

License

See repository license.

Showing the top 20 packages that depend on WinM.Sugar.

Packages Downloads
WinM.WpfModule.Data
Package Description
11
WinM.Biz.Core
维美业务通用基础能力(Core)。
9
WinM.Biz.Data
维美业务通用数据访问与数据模型模块(Data)。
9
WinM.WpfModule.Data
Package Description
6
WinM.WpfModule.Data
数据库操作库
6
WinM.WpfModule.Data
Package Description
4

.NET 8.0

Version Downloads Last updated
2.0.4 8 01/20/2026
2.0.3 3 01/20/2026
2.0.2 2 01/20/2026
2.0.1 60 11/13/2025
2.0.0 5 11/13/2025