Verwendung von Dapper mit SQL-Spatial-Typen als Parameter

8

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.

    
Erik van Brakel 14.07.2011, 08:41
quelle

3 Antworten

10

Der Schlüssel zum Implementieren seltsamer und wundervoller DB-spezifischer Parameter läuft auf SqlMapper.IDynamicParameters

hinaus

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.

    
Sam Saffron 14.07.2011, 23:46
quelle
5

Wenn es Ihnen nichts ausmacht, Dapper in seinem Kern zu verändern, dann können Sie verwenden, was ich getan habe ... Ссылка

Ich habe Dapper so geändert, dass Microsoft.SqlServer.Types.SqlGeography -Parameter akzeptiert werden.

    
Brendan 15.02.2013 16:28
quelle
1
  • Dapper.EntityFramework 1.26 unterstützt DbGeography
  • Dapper 1.32 hat eingebaute Unterstützung für SqlGeography
  • Dapper 1.33 hat eingebaute Unterstützung für SqlGeometry
  • Dapper.EntityFramework 1.33 hat eingebaute Unterstützung für DbGeometry
  • Dapper 1.34 hat eingebaute Unterstützung für SqlHierarchyId

Also mit den neuesten Bibliotheken; es sollte einfach funktionieren.

    
Marc Gravell 28.08.2014 08:55
quelle