Entity-framework-spatial-data-type

提供:Dev Guides
移動先:案内検索

Entity Framework-空間データ型

Entity Framework 5で空間タイプのサポートが導入されました。 クエリで空間データを分析できるようにするための一連の演算子も含まれています。 たとえば、クエリは、2つの地理的位置間の距離に基づいてフィルタリングできます。

  • Entity Frameworkを使用すると、新しい空間データ型をクラスのプロパティとして公開し、データベースの空間列にマップできます。
  • また、空間演算子を使用してデータベースで実行される空間計算に基づいてフィルター処理、並べ替え、グループ化を行うLINQクエリを作成することもできます。

2つの主な空間データタイプがあります-

  • 地理データタイプには、GPSの緯度と経度の座標などの楕円体データが格納されます。
  • ジオメトリデータタイプは、ユークリッド(フラット)座標系を表します。

次のクリケット場の例を見てみましょう。

  • ステップ1 *-[ファイル]→[新規]→[プロジェクト]メニューオプションから新しいプロジェクトを作成します。
  • ステップ2 *-左ペインで、コンソールアプリケーションを選択します。

クリケットプロジェクト

  • ステップ3 *-プロジェクト名を右クリックして、[NuGetパッケージの管理…]を選択します

NuGetプロジェクト

  • ステップ4 *-Entity Frameworkをインストールします。
  • ステップ5 *-System.Data.Entityアセンブリへの参照を追加し、空間データ型のステートメントを使用してSystem.Data.Spatialも追加します。

参照の追加

  • ステップ6 *-Program.csファイルに次のクラスを追加します。
public class CricketGround {
   public int ID { get; set; }
   public string Name { get; set; }
   public DbGeography Location { get; set; }
}
  • ステップ7 *-エンティティの定義に加えて、DbContextから派生し、DbSet <TEntity>プロパティを公開するクラスを定義する必要があります。

Program.csでコンテキスト定義を追加します。

public partial class CricketGroundContext : DbContext {
   public DbSet<CricketGround> CricketGrounds { get; set; }
}
  • ステップ8 *-次のコードをMain関数に追加します。これにより、2つの新しいCricketGroundオブジェクトがコンテキストに追加されます。
class Program {

   static void Main(string[] args) {

      using (var context = new CricketGroundContext()) {

         context.CricketGrounds.Add(new CricketGround() {
            Name = "Shalimar Cricket Ground",
            Location = DbGeography.FromText("POINT(-122.336106 47.605049)"),
         });

         context.CricketGrounds.Add(new CricketGround() {
            Name = "Marghazar Stadium", Location = DbGeography
               .FromText("POINT(-122.335197 47.646711)"),
         });

         context.SaveChanges();

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

         var cricketGround = (from cg in context.CricketGrounds
            orderby cg.Location.Distance(myLocation) select cg).FirstOrDefault();

         Console.WriteLine("The closest Cricket Ground to you is: {0}.", cricketGround.Name);
      }
   }
}

空間プロパティは、DbGeography.FromTextメソッドを使用して初期化されます。 WellKnownTextとして表される地理ポイントがメソッドに渡され、データが保存されます。 その後、その場所が指定された場所に最も近いCricketGroundオブジェクトが取得されます。

上記のコードが実行されると、次の出力が表示されます-

The closest Cricket Ground to you is: Marghazar Stadium

理解を深めるために、上記の例を段階的に実行することをお勧めします。