2016-04-24 6 views
2

Wie Verwenden von Geografiedaten, die in SQL Server mit Entity Framework Core gespeichert werden, wenn geography Datentyp noch nicht unterstützt wird und gespeicherte Prozeduren auch?Wie geography-Vorgang zu SQL Server in Entity Framework Core 1.0 ausgelagert wird

+0

Für den Moment sollten Sie EF6 verwenden, wenn Sie Ihre Anwendung freigeben möchten. Es gibt kein Datum für eine endgültige Version .... – Thomas

+0

@Thomas nicht immer eine Option, zum Beispiel wenn das Targeting UWP –

+0

ohh ... sorry ^^ hast du dieses Problem https://github.com/aspnet/EntityFramework/ Ausgaben/1100? – Thomas

Antwort

1

So habe ich es gemacht. Offensichtlich erhalten Sie nicht die Funktionen des DbGeography-Typs, aber für einfache Abfragen sollte es ausreichen.

public async Task<List<PointOfInterest>> Execute(double latitude, double longitude, int radius) 
     { 
      return await this.context.PointsOfInterest.FromSql(

      "DECLARE @point geography = geography::Point(@p0, @p1, 4326); " + 

      "SELECT Id, DateAdded, Latitude, Longitude " + 
      "FROM dbo.PointsOfInterest " + 
      "WHERE @point.STDistance(Location) <= @p2", 
      longitude, 
      latitude, 
      radius).ToListAsync(); 
     } 
+0

Wie mappst du deine Immobilie 'Location'? Der Speicherort ist eine sys.geography in Ihrer Datenbank richtig, aber wie haben Sie es in Ihrem Modell/flent api deklariert? Ich habe ein ähnliches Problem: https://stackoverflow.com/questions/44873740/entity-framework-core-type-udt-is-not-supported-on-this-platform/ – Eli

+0

Ich glaube, ich hatte es gerade gemappt Mein Modell als Zeichenfolge und dann eine Migration hinzugefügt. Ändern Sie die Spalte zu einem Geography-Typ mit der Methode "builder.Sql()". Alle Abfragen/Befehle, die Sie mit diesem Feld ausführen, müssen sich in Raw SQL befinden. – MrBliz

+0

@Eli Siehe https://stackoverflow.com/questions/40765439/efcore-spatial-query-a-number-is-pected-at-position-9-of-the-input-the-input/40877869#40877869 – MrBliz