【发布时间】:2011-01-30 09:10:26
【问题描述】:
我们在这部分搜索查询中使用的代码很简单:
myCriteria.Add(
Expression.InsensitiveLike("Code", itemCode, MatchMode.Anywhere));
这在生产环境中运行良好。
问题是我们的一位客户的商品代码包含此查询需要匹配的 % 符号。此代码生成的 SQL 输出类似于:
SELECT ... FROM ItemCodes WHERE ... AND Code LIKE '%ItemWith%Symbol%'
这清楚地解释了为什么他们在项目搜索中得到一些奇怪的结果。
有没有办法使用编程的Criteria 方法启用转义?
附录:
我们使用的是稍旧的 NHibernate 版本,2.1.0.4000(目前为 2.1.2.4853),但我查看了发行说明,并没有提及对此的修复。我也没有在他们的 bugtracker 中发现任何未解决的问题。
我们使用的是 SQL Server,所以我可以很容易地转义代码中的特殊字符(%、_、[ 和 ^),但我们使用 NHibernate 的目的是使我们的应用程序数据库引擎独立于尽可能的。
Restrictions.InsensitiveLike() 和 HqlQueryUtil.GetLikeExpr() 都不会转义它们的输入,删除 MatchMode 参数对转义没有任何影响。
我发现someone else 想要做同样的事情(三年前),解决方案是将escapeChar 重载添加到我上面提到的方法中(这在版本 2.0.0.3347 中已“修复” )。我对该问题添加了一条评论,要求进一步解决。
【问题讨论】:
标签: .net nhibernate criteria