Como escapar de uma cláusula LIKE usando o NHibernate Criteria?
O código que estamos usando é direto nesta parte da consulta de pesquisa:
myCriteria.Add(
Expression.InsensitiveLike("Code", itemCode, MatchMode.Anywhere));
e isso funciona bem em um ambiente de produção.
O problema é que um de nossos clientes possui códigos de item que contêm% símbolos aos quais essa consulta precisa corresponder. A saída SQL resultante desse código é semelhante a:
SELECT ... FROM ItemCodes WHERE ... AND Code LIKE '%ItemWith%Symbol%'
o que explica claramente por que eles estão obtendo resultados ímpares nas pesquisas de itens.
Existe uma maneira de ativar o escape usando o programáticoCriteria
métodos?
Termo aditivo:
Estamos usando uma versão um pouco antiga do NHibernate, 2.1.0.4000 (atual é 2.1.2.4853), mas verifiquei as notas de versão e não houve menção de uma correção para isso. Também não encontrei nenhum problema em aberto no bugtracker deles.
Estamos usando o SQL Server, para que eu possa escapar facilmente dos caracteres especiais (%, _, [e ^) no código, mas o objetivo de usar o NHibernate era tornar o nosso aplicativo independente do mecanismo de banco de dados o máximo possível .
NemRestrictions.InsensitiveLike()
nemHqlQueryUtil.GetLikeExpr()
escapar de suas entradas e remover oMatchMode
O parâmetro não faz diferença no que diz respeito à fuga.
Atualizar: eu encontreialguém querendo fazer a mesma coisa (três anos atrás), e a resolução era adicionar oescapeChar
sobrecargas nos métodos mencionados acima (isso foi "corrigido" na versão 2.0.0.3347). Adicionei um comentário a esse problema solicitando uma resolução maior.