Ich habe einen brandneuen Server, auf dem ich den .NET 4.5 Beta-Redistributable installiert habe. Ich erhalte eine NotImplemented-Ausnahme, wenn ich versuche, die räumlichen Funktionen zu verwenden. Dieser Code ....NET 4.5 Beta DbGeography NotImplementedException
var x = DbGeography.PointFromText(string.Format("POINT({0} {1})", -45, 45), 4326);
Wirft diese Ausnahme ...
System.NotImplementedException: The method or operation is not implemented.
at System.Data.Spatial.DefaultSpatialServices.GeographyPointFromText(String geographyText, Int32 spatialReferenceSystemId)
Wenn ich die volle VS.NET 11 Beta dann der Code funktioniert einwandfrei installieren. Irgendwelche Ideen warum? Was fehlt?
UPDATE FÜR ANTWORT
Dank Pawel. Sie müssen die SQL CLR-Typen installiert haben. Sie können die 2012-Version unter diesem Link erhalten:
Microsoft® System-CLR-Typen für Microsoft® SQL Server® 2012 http://www.microsoft.com/download/en/details.aspx?id=29065
MEINUNG
ich wirklich nicht verstehen, warum das .NET Framework eine hat Abhängigkeit von SQL Server. An diesen Klassen gibt es nichts Besonderes. Ich weiß, dass dies wahrscheinlich eine historische Sache ist, wo der Code ursprünglich vom SQL-Team geschrieben wurde und das .NET-Team ihn wiederverwenden wollte. Es ist nicht sehr klar, dass dies auch eine Provider-basierte Implementierung ist. Eine bessere Ausnahmemeldung hätte die Arbeit eines Tages gerettet.
Der Grund für die Abhängigkeit ist eigentlich plattformunabhängig. EF stellt dem Benutzer DbGeography- und DbGeometry-Typen (die plattformunabhängig sind) zur Verfügung, aber Datenbanken haben ihre eigenen räumlichen Typen, die sie verstehen. Sql Server hat seine eigenen räumlichen Typen, aber Oracle wird seine eigenen räumlichen Typen haben. Der räumliche Provider muss EF-Spatial-Typen in Typen konvertieren, die von der Datenbank verstanden werden. Da Sie SqlServer verwenden, übersetzt der SqlServer-spezifische räumliche Provider DbGeometry- und DbGeography-Typen in Sql Server-spezifische Typen. Sql Server versteht DbGeography oder DbGeometry nicht. – Pawel
Aber dieser Code verwendet nicht SQL Server; es ist nur eine einzelne Zeile von .NET-Code. Ich interagiere überhaupt nicht mit einer Datenbank. Was, wenn ich eine geospatiale In-Memory-Anwendung erstellen möchte? Warum kann ich das nicht mit .NET machen? – craigtadlock
Das Erstellen der gesamten räumlichen Funktionalität liegt außerhalb des Geltungsbereichs von Entity Framework und es würde kopieren, was bereits vom SqlServer-Team getan wurde. Wir verfügen nicht über das erforderliche Fachwissen und würden diese Zeit lieber für neue Funktionen des Entity Framework verwenden. Wenn Sie räumliche Typen ohne Datenbank verwenden müssen, ist es wahrscheinlich besser, eine spezielle Typbibliothek zu verwenden, die sich ausschließlich auf die räumliche Funktionalität konzentriert. Es wird wahrscheinlich auch besser funktionieren. – Pawel