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:

A geography -Spalte im Visual Studio-DBML-Designer mit 'Server-Datentyp' =geography erzeugt diesen Fehler:The specified type 'geography' is not a valid provider type.A geographyie Spalte "@" im Visual Studio-DBML-Designer ohne "Serverdatentyp" generiert diesen Fehler:Could not format node 'Value' for execution as SQL.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage