×

.NET全能选手SqlSugar:一款让你爱不释手的国产ORM框架

独孤求败 独孤求败 发表于2026-04-09 10:11:35 浏览13 评论0

抢沙发发表评论

一、SqlSugar是什么?

做.NET开发的,应该都听说过SqlSugar。它是一款国产ORM框架,官网:


https://www.donet5.com/Home/Doc
图片

说白了就是让你用C#代码操作数据库,不用手写SQL。写起来像这样:


var students = db.Queryable<Student>().Where(it => it.Age > 18).ToList();

不用记SELECT、FROM、WHERE,直接用你熟悉的Lambda表达式,编译还报错。

二、支持多少种数据库?

这是SqlSugar最硬的能力之一——30多种数据库,一套代码通杀

MySQL、SqlServer、Oracle、PostgreSQL、SQLite这些主流的不说了,关键是国产数据库:达梦、人大金仓、神通、瀚高、GaussDB,全支持。

更狠的是,切换数据库只需要改一行DbType配置,底层SQL自动适配。甲方说要换数据库,你改一行配置就完事。

图片
三、怎么下载?
图片

四、怎么用?多例还是单例?

用起来很简单,NuGet装包后new一个客户端就行。官方提供了两种模式:多例(SqlSugarClient)单例(SqlSugarScope)。新手直接用多例,每次new一个,简单不出错;想全局共享一个实例就用单例,都行。





// 多例var db = new SqlSugarClient(new ConnectionConfig(){...});// 单例var db = new SqlSugarScope(new ConnectionConfig(){...});
图片

五、以前:一堆WhereIf写到吐

做业务系统,最烦的就是多条件筛选——用户列表页,上面七八个筛选项,每个都可能填也可能不填。

传统的写法,就是一堆if:


















var query = db.Queryable<User>();if (!string.IsNullOrEmpty(name))    query = query.Where(it => it.Name.Contains(name));if (minAge.HasValue)    query = query.Where(it => it.Age >= minAge);if (maxAge.HasValue)    query = query.Where(it => it.Age <= maxAge);if (!string.IsNullOrEmpty(city))    query = query.Where(it => it.City == city);if (vipLevel.HasValue)    query = query.Where(it => it.VipLevel == vipLevel);if (startTime.HasValue)    query = query.Where(it => it.CreateTime >= startTime);if (endTime.HasValue)    query = query.Where(it => it.CreateTime <= endTime);// 还有更多...var result = query.ToList();

六:现在:前端传什么就查什么,一行字段名都不写

前端传的格式






[  { "FieldName": "Name", "ConditionalType": 2, "FieldValue": "张三" },  { "FieldName": "Age", "ConditionalType": 5, "FieldValue": "18" },  { "FieldName": "City", "ConditionalType": 0, "FieldValue": "北京" }]

  • FieldName:要查询的字段名

  • ConditionalType:操作类型枚举(0=等于、1=不等于、2=模糊、3=大于、4=大于等于、5=小于、6=小于等于...)

  • FieldValue:查询的值

可以看官网介绍

https://www.donet5.com/home/Doc?typeId=2314
图片

后端通用代码(一行字段名都不写死)






















var query = _db.Queryable<User>();
if (!string.IsNullOrEmpty(dynamics.data)){    var conditions = JsonConvert.DeserializeObject<List<ConditionRequest>>(dynamics.data);    var conModels = new List<IConditionalModel>();
    foreach (var item in conditions)    {        conModels.Add(new ConditionalModel        {            FieldName = item.FieldName,            FieldValue = item.FieldValue,            ConditionalType = item.ConditionalType        });    }
    query = query.Where(conModels);  // 直接传条件集合,SqlSugar自动解析}
var result = await query.ToListAsync();

核心优势

  • 后端完全不用写死任何字段名

  • 加任何新筛选条件,前端自己加,后端一行代码不改

  • 一套动态查询逻辑,通吃项目中所有业务表

  • ConditionalModel 还支持联表字段,比如 "order.code" 直接写就行

很多人担心ORM有性能损耗,但SqlSugar在底层做了大量优化:缓存、表达式树编译、批量操作……性能表现无限接近原生ADO.NET,甚至在某些场景下比Dapper还快。你要性能,它给你性能;你要方便,它给你方便。

ORM框架没有绝对的好坏,只有合不合适。但对于大多数.NET项目,尤其是需要快速迭代、可能换数据库、动态查询多的项目,SqlSugar真的是一个“选了不会错”的方案。


群贤毕至

访客