Ich bin mir ziemlich sicher, dass ich dir sagen kann, was passiert, aber ich weiß nicht, ob es eine Lösung dafür gibt.
Ich glaube, das Problem ist, dass das ':' Zeichen von NHibernate verwendet wird, um einen benannten Parameter zu erstellen. Ihr Ausdruck wird geändert zu:
set nocount on;update myusers set geo=geography@p0({0}, {1}, 4326) where userid={2};
Und @p0 wird eine SQL-Variable sein. Leider konnte ich keine Dokumentation finden, um Anführungszeichen zu escapen, so dass sie nicht als benannter Parameter behandelt werden.
Wenn ein Escape-Zeichen existiert (mein schnelles Überfliegen des NHibernate-Quellcodes hat keines gefunden; Benannte Parameter werden in NHibernate.Engine.Query.ParameterParser behandelt, wenn du etwas mehr Zeit mit der Suche verbringen möchtest), dann könntest du das verwenden.
Weitere Lösungen:
- Füge dem Quellcode ein Escape-Zeichen hinzu. Du kannst dann eine modifizierte Version von NHibernate verwenden. Wenn du das tust, solltest du deinen Patch dem Team vorlegen, damit er in das echte Produkt aufgenommen werden kann und du keine modifizierte Version des Quellcodes pflegen musst (kein Spaß).
- Erstelle eine benutzerdefinierte Funktion in deiner Datenbank, die ein geography::Point zurückgibt, und rufe dann deine Funktion anstelle der Standard-SQL-Funktion auf. Das scheint der schnellste / einfachste Weg zu sein, um loszulegen, fühlt sich aber auch ein wenig wie eine Notlösung an.
- Schaue nach, ob es in NHibernate Spatial etwas gibt, das es dir ermöglicht, das geography::Point() programmgesteuert hinzuzufügen [oder bearbeite den Code für dieses Projekt, um einen hinzuzufügen, und reiche den Patch bei diesem Team ein].
0 Stimmen
Wurde dieses Problem jemals im Quelltext behoben? Ich stoße auf das gleiche Problem.