У меня было немало проблем с использованием Microsoft.SqlServer.Types.SqlGeography
. Я хорошо знаю, что поддержка этого в Linq to Sql невелика. Я пробовал множество способов, начиная с ожидаемого пути (тип базы данных geography
, тип CLR SqlGeography
). Это создает NotSupportedException
, который широко обсуждается через блоги.
Затем я пошел по пути обработки столбца geography
как varbinary(max)
, так как geography
является UDT, сохраненным как двоичный. Это работает нормально (с некоторыми двоичными методами чтения и записи).
Однако теперь я сталкиваюсь с довольно неясной проблемой, которая, похоже, не со многими другими людьми.
System.InvalidCastException: Невозможно передать объект типа "Microsoft.SqlServer.Types.SqlGeography" для ввода "System.Byte []".
Эта ошибка вызывается из ObjectMaterializer
при повторении запроса. Кажется, что это происходит только тогда, когда таблицы, содержащие столбцы географии, включены в запрос неявно (т.е. Используя свойства EntityRef<>
для объединения).
System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
Мой вопрос: если я получаю столбец geography
как varbinary(max)
, я мог бы ожидать обратную ошибку: нельзя отбрасывать byte[]
в SqlGeography
. Это я понял. Этого я не делаю. У меня есть некоторые свойства на частичных классах LINQ to SQL, которые скрывают двоичное преобразование... могут ли это быть проблемой?
Любая помощь оценивается, и я знаю, что, вероятно, информации недостаточно.
Дополнительно:
- A
geography
в конструкторе dbml Visual Studio с "Тип данных сервера" =geography
генерирует эту ошибку:The specified type 'geography' is not a valid provider type.
- Столбец
geography
в конструкторе dbml Visual Studio без "Тип данных сервера" генерирует эту ошибку:Could not format node 'Value' for execution as SQL.