在实体框架5中引入了空间类型支持.还包括一组运算符,以允许查询分析空间数据.例如,查询可以根据两个地理位置之间的距离进行过滤.
实体框架将允许新的空间数据类型要在类上公开属性并将它们映射到数据库中的空间列.
您还可以编写使用空间运算符根据数据库中执行的空间计算进行过滤,排序和分组.
有两种主要的空间数据类型和减号;
地理数据类型存储椭圆体数据,例如GPS纬度和经度坐标.
几何数据类型代表欧几里德(平面)坐标系.
我们来看看进入下面的板球场示例.
第1步 : 从File&rarr创建新项目;新的 → 项目菜单选项.
第2步 : 在左侧窗格中,选择控制台应用程序.
第3步 : 右键单击项目名称,然后选择Manage NuGet Packages ...
第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< TEntity>的类.属性.
在Program.cs中添加上下文定义.
public partial class CricketGroundContext : DbContext { public DbSetCricketGrounds { 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
我们建议你执行上面的例子为了更好地理解,一步一步地进行.