📅  最后修改于: 2020-11-21 07:27:03             🧑  作者: Mango
在Entity Framework 5中引入了空间类型支持。还包括一组运算符,以允许查询分析空间数据。例如,查询可以基于两个地理位置之间的距离进行过滤。
实体框架将允许新的空间数据类型作为类的属性公开,并将它们映射到数据库中的空间列。
您还将能够编写LINQ查询,这些查询利用空间运算符基于数据库中执行的空间计算进行过滤,排序和分组。
有两种主要的空间数据类型-
地理数据类型存储椭球数据,例如GPS纬度和经度坐标。
几何数据类型表示欧几里得(平面)坐标系。
让我们看一下下面的板球场示例。
步骤1-从文件→新建→项目菜单选项创建新项目。
步骤2-在左窗格中,选择控制台应用程序。
步骤3-右键单击项目名称,然后选择管理NuGet软件包…
步骤4-安装实体框架。
步骤5-添加对System.Data.Entity程序集的引用,还添加System.Data.Spatial using语句用于空间数据类型。
步骤6-在Program.cs文件中添加以下类。
public class CricketGround {
public int ID { get; set; }
public string Name { get; set; }
public DbGeography Location { get; set; }
}
步骤7-除了定义实体,您还需要定义一个从DbContext派生并公开DbSet
在Program.cs中添加上下文定义。
public partial class CricketGroundContext : DbContext {
public DbSet CricketGrounds { get; set; }
}
步骤8-将以下代码添加到Main函数,这将在上下文中添加两个新的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
我们建议您逐步执行上述示例,以更好地理解。