¿Cómo escapo de una cláusula LIKE con los criterios de NHibernate?
El código que estamos usando es sencillo en esta parte de la consulta de búsqueda:
myCriteria.Add(
Expression.InsensitiveLike("Code", itemCode, MatchMode.Anywhere));
y esto funciona bien en un entorno de producción.
El problema es que uno de nuestros clientes tiene códigos de artículos que contienen% símbolos con los que esta consulta debe coincidir. El resultado SQL resultante de este código es similar a:
SELECT ... FROM ItemCodes WHERE ... AND Code LIKE '%ItemWith%Symbol%'
lo que explica claramente por qué obtienen resultados extraños en las búsquedas de artículos.
¿Hay alguna manera de permitir escapar usando la programáticaCriteria
métodos?
Apéndice:
Estamos usando una versión un poco antigua de NHibernate, 2.1.0.4000 (la versión actual es 2.1.2.4853), pero verifiqué las notas de la versión y no se mencionó una solución para esto. Tampoco encontré ningún problema abierto en su bugtracker.
Estamos usando SQL Server, por lo que puedo escapar de los caracteres especiales (%, _, [y ^) en el código con mucha facilidad, pero el objetivo de nosotros usar NHibernate era hacer que nuestra aplicación sea lo más independiente posible del motor de base de datos .
NingunoRestrictions.InsensitiveLike()
niHqlQueryUtil.GetLikeExpr()
escapar de sus entradas y eliminar elMatchMode
El parámetro no hace ninguna diferencia en lo que respecta al escape.
Actualizar: encontréalguien más queriendo hacer lo mismo (hace tres años), y la resolución fue agregar elescapeChar
sobrecargas a los métodos que he mencionado anteriormente (esto fue "arreglado" en la versión 2.0.0.3347). Agregué un comentario a ese problema solicitando una resolución adicional.