Entity-framework-spatial-data-type
提供:Dev Guides
Entity Framework-空間データ型
Entity Framework 5で空間タイプのサポートが導入されました。 クエリで空間データを分析できるようにするための一連の演算子も含まれています。 たとえば、クエリは、2つの地理的位置間の距離に基づいてフィルタリングできます。
- Entity Frameworkを使用すると、新しい空間データ型をクラスのプロパティとして公開し、データベースの空間列にマップできます。
- また、空間演算子を使用してデータベースで実行される空間計算に基づいてフィルター処理、並べ替え、グループ化を行うLINQクエリを作成することもできます。
2つの主な空間データタイプがあります-
- 地理データタイプには、GPSの緯度と経度の座標などの楕円体データが格納されます。
- ジオメトリデータタイプは、ユークリッド(フラット)座標系を表します。
次のクリケット場の例を見てみましょう。
- ステップ1 *-[ファイル]→[新規]→[プロジェクト]メニューオプションから新しいプロジェクトを作成します。
- ステップ2 *-左ペインで、コンソールアプリケーションを選択します。
- ステップ3 *-プロジェクト名を右クリックして、[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
理解を深めるために、上記の例を段階的に実行することをお勧めします。