Mam zupełnie nowy serwer, na którym zainstalowałem redystrybucję .NET 4.5 Beta. Dostaję wyjątek Niezatwierdzony podczas próby użycia funkcji przestrzennych. Ten kod ....NET 4.5 Beta DbGeography NotImplementedException
var x = DbGeography.PointFromText(string.Format("POINT({0} {1})", -45, 45), 4326);
Zgłasza ten wyjątek ...
System.NotImplementedException: The method or operation is not implemented.
at System.Data.Spatial.DefaultSpatialServices.GeographyPointFromText(String geographyText, Int32 spatialReferenceSystemId)
Jeśli mogę zainstalować pełną VS.NET 11 Beta wówczas kod działa poprawnie. Jakieś pomysły, dlaczego? Czego brakuje?
UPDATE na odpowiedź
Dzięki Paweł. Musisz mieć zainstalowane typy SQL CLR. Można pobrać wersję 2012 pod tym linkiem:
typy CLR dla systemu Microsoft® SQL Server® Microsoft® 2012 http://www.microsoft.com/download/en/details.aspx?id=29065
OPINIA
I naprawdę nie rozumiem, dlaczego NET ma zależność od SQL Server. W tych klasach nie ma nic szczególnego. Rozumiem, że jest to prawdopodobnie historyczna sprawa, w której kod został pierwotnie napisany przez zespół SQL, a zespół .NET chciał go ponownie użyć. Nie jest jasne, czy jest to implementacja oparta na dostawcy. Lepszy komunikat o wyjątku pozwoliłby zaoszczędzić dzieło dnia.
Powodem zależności jest niezależność od platformy. EF ujawnia użytkownikowi typy DbGeography i DbGeometry (które są niezależne od platformy), ale bazy danych mają swoje własne typy przestrzenne, które rozumieją. Sql Server ma własne typy przestrzenne, ale Oracle będzie posiadał własne typy przestrzenne. Dostawca przestrzenny musi tłumaczyć typy przestrzenne EF na typy, które rozumie baza danych. Ponieważ używasz SqlServer, specyficzny dla SqlServer dostawca przestrzenny tłumaczy typy DbGeometry i DbGeography na typy specyficzne dla serwera Sql. Sql Server nie rozumie DbGeography ani DbGeometry. – Pawel
Ale ten kod nie używa serwera SQL; to tylko jedna linia kodu .NET. W ogóle nie wchodzę w interakcje z bazą danych. Co się stanie, jeśli chcę zbudować aplikację geoprzestrzenną w pamięci? Dlaczego nie mogę tego zrobić z właśnie .NET? – craigtadlock
Budowanie całej funkcjonalności przestrzennej jest poza zakresem Entity Framework i kopiowałoby to, co zostało już zrobione przez zespół SqlServer. Nie mamy wiedzy i wolimy spędzić ten czas na nowych funkcjach Entity Framework. Jeśli chcesz używać typów przestrzennych bez bazy danych, prawdopodobnie lepiej będzie, jeśli użyjesz wyspecjalizowanej biblioteki typów, która skupia się wyłącznie na funkcjonalności przestrzennej. Prawdopodobnie też będzie działać lepiej. – Pawel