2012-03-12 2 views
1

したがって、Geography SQLタイプは、エンティティフレームワークではまだサポートされていません。GPSはEntityフレームワークとLINQとの間で調整されます

誰かが私が持っている問題の解決策を持っているのだろうかと思っていました。私は、エンティティフレームワークとLINQを使用して、いくつかのデータアクセスメソッドを持つC#クラスを持っています。 これらのメソッドはGPS座標を渡しています。データベース(およびエンティティ・フレームワーク・タイプ)には、経度と緯度のフィールドがあり、行が作成されたときに移入されます。これはすべて正常に動作します。

私がしたいことは、LINQクエリが、指定されたGPS座標に近い(半径内にある)行を引き戻すことです。これはアーキテクチャーの変更になるため、ストアドプロシージャーを使用する必要はありません。

誰にもこれに関するアイデアはありますか?私はアイデアのために苦労している。

答えて

1

データベースの空間インデックス(高速空間クエリが可能)を利用する場合は、テーブルにGeographyの位置を格納する必要があります(現在の緯度/経度の列は、この値に)。

エンティティフレームワークでGeography型/関数をサポートしていないため、内部でSTDistance(SQL Server 2008 R2を使用している場合)を呼び出すストアドプロシージャを作成することしかできません。

正に、空間関数は実際にはデータベースに依存しているため(STDistanceはSQL Server 2008 R2にのみ有効です)、特定のユースケースに対してストアドプロシージャを持つことは悪い考えではありません。

+0

EF5から始めて、DbGeographyのサポートが追加されました。私の答えを見てください。 –

2

受け入れられる回答は古いです。 EF5は、空間データを扱うためのAPIを導入しました。以下はMSDNの例です。

モデル

using System.Data.Spatial; //For EF5 
//using System.Data.Entity.Spatial; //For EF6 

public class University 
{ 
    public int UniversityID { get; set; } 
    public string Name { get; set; } 
    public DbGeography Location { get; set; } 
} 

DbContext

using System.Data.Entity; 

public partial class UniversityContext : DbContext 
{ 
    public DbSet<University> Universities { get; set; } 
} 

が持続し、取得したデータ

using (var context = new UniversityContext()) 
{ 
    context.Universities.Add(new University() 
     { 
      Name = "Graphic Design Institute", 
      Location = DbGeography.FromText("POINT(-122.336106 47.605049)"), 
     }); 

    context. Universities.Add(new University() 
     { 
      Name = "School of Fine Art", 
      Location = DbGeography.FromText("POINT(-122.335197 47.646711)"), 
     }); 

    context.SaveChanges(); 

    var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)"); 

    var university = (from u in context.Universities 
         orderby u.Location.Distance(myLocation) 
         select u).FirstOrDefault(); 

    Console.WriteLine( 
     "The closest University to you is: {0}.", 
     university.Name); 
} 

上記のクエリ結果がでなければなりませんThe closest University to you is: School of Fine Art.

参照してください。 whole article and video here.

+0

おかげです.... – SHM

関連する問題