Как мне избежать предложения LIKE, используя критерии NHibernate?
Код, который мы используем, прост в этой части поискового запроса:
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), но я проверил примечания к выпуску, и там не было упоминания об исправлении. Я не нашел ни одной открытой проблемы в их багтрекере.
Мы используем SQL Server, поэтому я могу очень легко избежать специальных символов (%, _, [и ^) в коде, но цель использования NHibernate состояла в том, чтобы сделать наше приложение максимально независимым от базы данных. ,
ниRestrictions.InsensitiveLike()
ниHqlQueryUtil.GetLikeExpr()
избежать их входов и удаленияMatchMode
Параметр не имеет значения, насколько экранирование идет.
Обновить: я нашелкто-нибудь другой желая сделать то же самое (три года назад), и резолюция должна была добавитьescapeChar
перегружает методы, о которых я упоминал выше (это было «исправлено» в версии 2.0.0.3347). Я добавил комментарий к этому вопросу с просьбой о дальнейшем разрешении.