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
Antwort
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();
}
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
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
@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
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
@Thomas nicht immer eine Option, zum Beispiel wenn das Targeting UWP –
ohh ... sorry ^^ hast du dieses Problem https://github.com/aspnet/EntityFramework/ Ausgaben/1100? – Thomas