Ho un server nuovo di zecca su cui ho installato .NET 4.5 Beta ridistribuibile. Ricevo un'eccezione NotImplemented quando provo a utilizzare le funzionalità spaziali. Questo codice ....NET 4.5 Beta DbGeography NotImplementedException
var x = DbGeography.PointFromText(string.Format("POINT({0} {1})", -45, 45), 4326);
genera questa eccezione ...
System.NotImplementedException: The method or operation is not implemented.
at System.Data.Spatial.DefaultSpatialServices.GeographyPointFromText(String geographyText, Int32 spatialReferenceSystemId)
Se installo il pieno VS.NET 11 Beta poi il codice funziona bene. Qualche idea, perché? Che cosa manca?
AGGIORNAMENTO PER RISPOSTA
Grazie a Pawel. È necessario che i tipi CLR SQL siano installati. È possibile ottenere la versione 2012 a questo link:
Tipi Microsoft® System CLR per Microsoft® SQL Server® 2012 http://www.microsoft.com/download/en/details.aspx?id=29065
PARERE
io davvero non capisco perché il framework .NET ha un dipendenza da SQL Server. Non c'è niente di speciale in queste classi. Mi rendo conto che questa è probabilmente una cosa storica in cui il codice è stato originariamente scritto dal team di SQL e il team di .NET ha voluto riutilizzarlo. Non è molto chiaro che si tratti di un'implementazione basata sul provider. Un messaggio di eccezione migliore avrebbe salvato un giorno di lavoro.
Il motivo della dipendenza è in realtà di essere indipendente dalla piattaforma. EF espone i tipi di DbGeography e DbGeometry (che sono indipendenti dalla piattaforma) all'utente, ma i database hanno i loro tipi spaziali che comprendono. Sql Server ha i propri tipi spaziali ma Oracle avrà i propri tipi spaziali. Il provider spaziale deve tradurre tipi spaziali EF in tipi che il database comprende. Poiché si utilizza SqlServer, il provider spaziale specifico SqlServer converte i tipi DbGeometry e DbGeography in tipi specifici di Sql Server. Il server Sql non comprende DbGeography o DbGeometry. – Pawel
Ma quel codice non sta usando SQL Server; è solo una linea di codice .NET. Non sto affatto interagendo con un database. Cosa succede se volevo creare un'applicazione geospaziale in memoria? Perché non posso farlo con solo .NET? – craigtadlock
Costruire l'intera funzionalità spaziale non rientra nell'ambito di Entity Framework e copierà ciò che è già stato fatto dal team di SqlServer. Non disponiamo dell'esperienza e preferiremmo trascorrere questo tempo su nuove funzionalità di Entity Framework. Se è necessario utilizzare tipi spaziali senza database, sarà preferibile utilizzare una libreria di tipi specializzata che si concentra esclusivamente sulle funzionalità spaziali. Probabilmente funzionerà anche meglio. – Pawel