У меня было немало проблем с использованием 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.