真的被Sqlsugar给气到了!
博客园潜水多年,账号都搞忘记好几个,一直没有写什么东西,但是这次真忍不了了,被sqlsugar出现的奇葩问题和作者的奇葩处理方式给气到了。
起因是在使用Sqlsugar过程中,偶然发现了一个问题,确认这个问题真实存在后,我就去提了issue:
模糊查询遭遇特殊符号时的问题 · Issue #1303 · DotNetNext/SqlSugar
省流说明: 问题大概就是,当模糊搜索的关键词是 %% 时,sqlsugar 会将sql生成 like '%%%%' 这样。由于 %%%% 允许名字包含任意数量的字符,这个模式实际上会匹配 字段中的任何值。换句话说,这个 LIKE 条件没有提供任何过滤,因此它相当于没有指定任何条件。
本身这个问题很简单,我甚至都不太相信开源多年,这么大用户量的ORM会有这种低级的问题。但是作者的回复真的把我惊到了:
就是不改,还狡辩称很多ORM都不会去处理这个。
昨天忙,没时间理这个,今天空闲了,然后就做了下测试,选择了三个最常用的ORM:Freesql,SqlSugar,EF Core。
ORM | 版本号 |
Freesql | 3.2.833 |
SqlsugarCore | 5.1.4.17 |
EF CORE | 8.0.11 |
测试代码如下:
var word = "%%"; Console.WriteLine(" "); Console.WriteLine(" "); Console.WriteLine("FreeSql:"); var list1 = freeSql.Select<Student>().Where(t => t.Name.Contains(word)).ToList(); Console.WriteLine(" "); Console.WriteLine(" "); Console.WriteLine("SqlSugar:"); var list2 = sqlSugarClient.Queryable<Student>().Where(t => t.Name.Contains(word)).ToList(); Console.WriteLine(" "); Console.WriteLine(" "); Console.WriteLine("EF CORE:"); var list3= dbContext.Students.Where(t => t.Name.Contains(word)).ToList();
执行结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | FreeSql: Sql:SELECT a.`Id`, a.`Name`, a.`Age`, a.`GradeId` FROM `student` a WHERE (locate( '%%' , a.`Name`) > 0) SqlSugar: SELECT `Id`,`Name`,`Age`,`GradeId` FROM `student` WHERE (`Name` like concat( '%' ,@MethodConst0, '%' )) { "@MethodConst0" : "%%" } EF CORE: warn: Microsoft.EntityFrameworkCore.Model.Validation[10400] Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data; this mode should only be enabled during development. info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (3ms) [Parameters=[@__word_0_contains= '%\%\%%' (Size = 4000)], CommandType= 'Text' , CommandTimeout= '30' ] SELECT `s`.`Id`, `s`.`Age`, `s`.`GradeId`, `s`.`Name` FROM `student` AS `s` WHERE `s`.`Name` LIKE @__word_0_contains |
从上述结果可以明显看到,Freesql使用了 locate 函数来实现模糊搜索;EF CORE 对 % 进行了转义(__word_0_contains='%\%\%%') 。 唯独Sqlsugar,就是个奇葩,完全不处理!作者还强词夺理的狡辩!
SON OF BISCUIT !
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器