Как мне избежать предложения 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). Я добавил комментарий к этому вопросу с просьбой о дальнейшем разрешении.

Ответы на вопрос(2)

Ваш ответ на вопрос