小编Gui*_*oli的帖子

空间类型实体框架核心SQL Server

我需要处理地理距离.

我有

public class Clinic
{
    ...
    public double Latitude
    public double Longitud
    ...
}
Run Code Online (Sandbox Code Playgroud)

该诊所位于SQL Server DB上.我需要将它们按距离排列到某一点.对于我读到的内容,Entity Framework Core不支持DbGeography或类似于表示SQL Server类型的东西:

geography
Run Code Online (Sandbox Code Playgroud)

我在数据库中添加了一个列,其中包含每个诊所的计算地理点

UPDATE Clinics SET Geo = geography::Point(Clinics.Latitude, Clinics.Longitud,4326)
Run Code Online (Sandbox Code Playgroud)

好的,知道我需要退回订购.SQL通过查询支持此功能

DECLARE @p geography;
SET @p = geography::Point(41,2,4326);
SELECT * FROM Clinics c ORDER BY @p.STDistance(c.Geo);
Run Code Online (Sandbox Code Playgroud)

和Entity Framework Core支持使用原始SQL进行查询.

context.Clinics.FromSql("..query..")
Run Code Online (Sandbox Code Playgroud)

正如FromSql的文档所说,如果您返回的数据与模型不完全匹配,那么它就会崩溃.就像在C#中我不能有代表Geo的DbGeography我无法弄清楚如何解决这个问题.

编辑1:

部分使用以下内容:

string rawSQL = @"
        DECLARE @p geography;
        SET @p = geography::Point(41,2,4326);
        SELECT c.Id, c.Name, c.Price, c.Quote, c.QuoteAuthor, c.QuoteSource, c.Description, c.Image, c.Latitude, c.Longitude, c.Category, c.CenterDistance, c.NumReviews, c.Stars
        FROM …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework entity-framework-core

8
推荐指数
1
解决办法
1061
查看次数