Ich habe ein System, das im Grunde eine Abfrage wie folgt machen muss:
%Vor%Dies ist ziemlich einfach zu tun, wenn Sie Vanilla SQL-Parameter verwenden, Sie müssen Ihren Parameter nur auf eine untypische Weise erstellen (wobei die Builder-Variable ein SqlGeometryBuilder ist, mit dem ich ein Rechteck erstelle):
%Vor%Nun, wenn ich dies mit dem Dapper versuche, bekomme ich einen Fehler, dass es nicht herausfinden kann, wie man das als Parameter benutzt. Wer hat das funktioniert, oder irgendwelche Hinweise, wie man das ermöglicht? Ich habe eine Problemumgehung, aber das beinhaltet die Verwendung der Zeichenfolgendarstellung und das Konvertieren in einen Geometrietyp in meiner SQL-Abfrage. Das will ich wirklich nicht.
Um den Kommentar zu beantworten, ist der Fehler, den ich bekomme, 'der Member-Parameter vom Typ Microsoft.SqlServer.Types.SqlGeometry kann nicht als Parameterwert verwendet werden'. Mit anderen Worten, dapper kann nicht mit einem SqlGeometry-Objekt als Parameter umgehen.
Der Schlüssel zum Implementieren seltsamer und wundervoller DB-spezifischer Parameter läuft auf SqlMapper.IDynamicParameters
Diese einfache Schnittstelle hat einen einzigen Endpunkt:
%Vor% Dapper hat bereits eine generische DB-Implementierung dieser Schnittstelle namens: DynamicParameters
, mit der Sie Ausgabe- und Rückgabewerte verarbeiten können.
Um dieses räumliche Zeug nachzuahmen, würde ich etwas wie:
versuchen %Vor%Verwendung:
%Vor%Diese einfache Implementierung der Schnittstelle behandelt nur einen einzigen Parameter, kann aber leicht so erweitert werden, dass sie mehrere Parameter behandelt, entweder durch Übergabe vom Konstruktor oder durch Hinzufügen einer Hilfs-AddParameter-Methode.
DbGeography
SqlGeography
SqlGeometry
DbGeometry
SqlHierarchyId
Also mit den neuesten Bibliotheken; es sollte einfach funktionieren.
Tags und Links sql-server-2008 spatial orm dapper