2017-05-19 101 views
8

Jeorafik uzaklıklarla çalışmam gerekiyor. Uzamsal tip Entity Framework Çekirdek SQL Server

Ben

public class Clinic 
{ 
    ... 
    public double Latitude 
    public double Longitud 
    ... 
} 

Bu klinikler SQL Server veritabanında vardır aldık. Onlara belli bir noktaya kadar sipariş vermem gerekiyor.

geography 

Her klinikte

hesaplanan coğrafya noktası ile veritabanına bir sütun ekledi: ne okumak için , Varlık Çerçeve Çekirdek SQL Server tipini temsil konusunda hiçbir DbGeography için destek veya buna benzer bir şey vardır
UPDATE Clinics SET Geo = geography::Point(Clinics.Latitude, Clinics.Longitud,4326) 

Tamam, bunları sipariş vermem gerektiğini biliyorum. SQL, bu soruyu

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

sorgulayarak destekler ve Entity Framework Çekirdeği, işlenmeyi SQL ile sorgulamayı destekler. FromSql dokümantasyonu dediği gibi iadelerinizde veri tam olarak çöküyor modeli aynı değilse

context.Clinics.FromSql("..query..") 

Şey, vardır. C# 'da olduğu gibi Coğrafi temsil eden bir DbGeografisi olamaz. Bunu nasıl çözeceğimi anlayamıyorum.

edit 1:

kısmen aşağıdaki çalışmak lazım:

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 Clinics c 
     ORDER BY @p.STDistance(c.Geo); "; 
query = query.FromSql(rawSQL); 

yüzden şimdi Klinik tüm özelliklerini almak ve işe yarıyor! Şey inanıyorum dahil önce orderBy ham sql geliyor çünkü klinikler ben bir sorgu çalıştırdığınızda

public class Clinic 
{ 
    ... 
    public double Latitude 
    public double Longitud 
    public Amenity amenity 
    ... 
} 

yüzden linq tarafından

query = query.Include(c => c.ClinicAmenities).ThenInclude(ca => ca.Amenity); 

Kalıpları olanaklar bulunmaktadır gereken ilgili sınıf imkanlar vardır, olduğu

+0

gibi

şey bu anlamaya mı? "ThenIncluded" Amenitesini kullanırken bir hata mesajı aldınız mı? – influent

cevap

0

Hangi hatayı aldığınızı belirtmediniz.

Bana hata veriyorsunuz "Düzeltme işlemi, saklı yordamı çağırırken desteklenmiyor."

Yapabilecekleriniz iki soruyu yürütmektir. Bu

dbContext.Amenities.Load(); 

string rawSQL = @" 
      DECLARE @p geography; 
      SET @p = geography::Point(41,2,4326); 
      SELECT c.Id, c.Name, c.Price, c.Quote, c.QuoteAuthor 
      FROM Clinics c 
      ORDER BY @p.STDistance(c.Geo)"; 

// EF will automatically wire up the references between entities 
// that have been queried for 
var clinicsWithAmenities = dbContext.Clinics.FromSql(rawSQL).ToList();