У меня есть новый сервер, на котором я устанавливал бета-версию .NET 4.5. При попытке использовать пространственные функции я получаю исключение NotImplemented. Этот код ....NET 4.5 Beta DbGeography NotImplementedException
var x = DbGeography.PointFromText(string.Format("POINT({0} {1})", -45, 45), 4326);
Выдает это исключение ...
System.NotImplementedException: The method or operation is not implemented.
at System.Data.Spatial.DefaultSpatialServices.GeographyPointFromText(String geographyText, Int32 spatialReferenceSystemId)
Если я установить полную VS.NET 11 Beta, то код работает отлично. Любые идеи почему? Чего не хватает?
ОБНОВЛЕНИЕ ДЛЯ ОТВЕТА
Благодаря Pawel. Необходимо установить типы SQL CLR. Вы можете получить версию 2012 по этой ссылке:
Типы Microsoft® System CLR для Microsoft® SQL Server® 2012 http://www.microsoft.com/download/en/details.aspx?id=29065
МНЕНИЕ
Я действительно не понимаю, почему рамки .NET имеет зависимости от SQL Server. В этих классах нет ничего особенного. Я понимаю, что это, вероятно, историческая вещь, когда код был первоначально написан командой SQL, а команда .NET хотела его повторно использовать. Не совсем ясно, что это также реализация на основе провайдеров. Лучшее сообщение об исключении спасло бы дневную работу.
Причина зависимости фактически не зависит от платформы. EF предоставляет пользователям DbGeography и DbGeometry типы (которые являются агностическими для платформы), но базы данных имеют свои собственные пространственные типы, которые они понимают. Sql Server имеет свои собственные пространственные типы, но у Oracle будут свои собственные пространственные типы. Пространственный провайдер должен преобразовывать пространственные типы EF в типы, которые понимает база данных. Поскольку вы используете SqlServer, поставщик пространственных данных SqlServer переводит типы DbGeometry и DbGeography в типы, специфичные для сервера Sql. Сервер Sql не понимает DbGeography или DbGeometry. – Pawel
Но этот код не использует SQL Server; это всего лишь одна строка кода .NET. Im не взаимодействует с базой данных вообще. Что делать, если я хотел бы построить геопространственное приложение в памяти? Почему я не могу это сделать только с .NET? – craigtadlock
Построение всей пространственной функциональности выходит за рамки Entity Framework, и это будет копирование того, что уже было сделано командой SqlServer. У нас нет опыта, и мы предпочли бы потратить это время на новые возможности Entity Framework. Если вам нужно использовать пространственные типы без базы данных, вам, вероятно, будет лучше использовать специализированную библиотеку типов, которая фокусируется исключительно на пространственной функциональности. Вероятно, он тоже будет работать лучше. – Pawel