Wie kann ich mit NHibernate Criteria einer LIKE-Klausel entkommen?
Der von uns verwendete Code ist in diesem Teil der Suchanfrage einfach:
myCriteria.Add(
Expression.InsensitiveLike("Code", itemCode, MatchMode.Anywhere));
und dies funktioniert gut in einer Produktionsumgebung.
Das Problem ist, dass einer unserer Kunden Artikelcodes hat, die% -Symbole enthalten, mit denen diese Abfrage übereinstimmen muss. Die resultierende SQL-Ausgabe dieses Codes ähnelt:
SELECT ... FROM ItemCodes WHERE ... AND Code LIKE '%ItemWith%Symbol%'
Das erklärt deutlich, warum sie bei der Artikelsuche seltsame Ergebnisse erzielen.
Gibt es eine Möglichkeit, die Escape-Funktion mit dem Programm zu aktivieren?Criteria
Methoden?
Nachtrag:
Wir verwenden eine leicht veraltete Version von NHibernate, 2.1.0.4000 (der aktuelle Stand ist 2.1.2.4853), aber ich habe die Versionshinweise überprüft, und es wurde kein Fix dafür erwähnt. Ich habe auch kein offenes Problem in ihrem Bugtracker gefunden.
Wir verwenden SQL Server, so dass ich die Sonderzeichen (%, _, [und ^) im Code sehr leicht umgehen kann, aber der Sinn von NHibernate bestand darin, unsere Anwendungsdatenbank-Engine so unabhängig wie möglich zu machen .
WederRestrictions.InsensitiveLike()
NochHqlQueryUtil.GetLikeExpr()
Entkomme ihren Eingaben und entferne dieMatchMode
Parameter macht keinen Unterschied, was das Entkommen angeht.
Aktualisieren: ich fandjemand anderes Ich wollte dasselbe tun (vor drei Jahren), und der Beschluss lautete, dieescapeChar
Überladungen der oben genannten Methoden (dies wurde in Version 2.0.0.3347 "behoben"). Ich habe diesem Problem einen Kommentar hinzugefügt, in dem ich um eine weitere Lösung gebeten habe.