Ist es möglich, SqlGeography mit Linq to Sql zu verwenden?
Ich habe schon einige Probleme damit gehabt, @ zu benutzMicrosoft.SqlServer.Types.SqlGeography
. Ich weiß genau, dass die Unterstützung für diese in Linq to Sql nicht großartig ist. Ich habe zahlreiche Methoden ausprobiert, angefangen mit der erwarteten Methode (Datenbanktyp vongeography
, CLR-Typ vonSqlGeography
). Dies erzeugt dasNotSupportedException
, das in Blogs häufig diskutiert wird.
Ich habe dann den Weg der Behandlung des @ geganggeography
Spalte alsvarbinary(max)
, wiegeography
ist ein UDT, der als Binärdatei gespeichert wird. Dies scheint gut zu funktionieren (mit einigen binären Lese- und Schreib-Erweiterungsmethoden).
Jedoch stoße ich jetzt auf ein eher obskures Problem, das vielen anderen Leuten anscheinend nicht passiert ist.
System.InvalidCastException: Objekt vom Typ "Microsoft.SqlServer.Types.SqlGeography" kann nicht in "System.Byte []" umgewandelt werden.
Dieser Fehler wird von einem @ geworfObjectMaterializer
beim Durchlaufen einer Abfrage. Es scheint nur dann aufzutreten, wenn die Tabellen, die Geografiespalten enthalten, implizit in einer Abfrage enthalten sind (z. B. mit demEntityRef<>
Eigenschaften für Joins).
System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext ()
Meine Frage: Wenn ich das @ erhalgeography
Spalte alsvarbinary(max)
, Ich könnte den umgekehrten Fehler erwarten: @ kann nicht gewirkt werdbyte[]
zuSqlGeography
. Das würde ich verstehen. Das tue ich nicht. Ich habe einige Eigenheiten in den partiellen LINQ to SQL-Klassen, die die Binärkonvertierung verbergen ... könnten diese das Problem sein?
Hilfe dankbar, und ich weiß, dass es wahrscheinlich nicht genug Informationen gibt.
Extras:
Ageography
-Spalte im Visual Studio-DBML-Designer mit 'Server-Datentyp' =geography
erzeugt diesen Fehler:The specified type 'geography' is not a valid provider type.
A geography
ie Spalte "@" im Visual Studio-DBML-Designer ohne "Serverdatentyp" generiert diesen Fehler:Could not format node 'Value' for execution as SQL.