开发手册 欢迎您!
软件开发者资料库

Entity Framework - 空间数据类型

Entity Framework空间数据类型 - 从概述,体系结构,环境设置,数据库设置,数据模型,DbContext,类型,关系,生命周期,代码优先方法,模型第一方法,数据库第一方法,DEV方法,数据库操作,学习实体框架,并发,事务,视图,索引,存储过程,断开连接的实体,表值函数,本机SQL,枚举支持,异步查询,持久性,投影查询,命令记录,命令拦截,空间数据类型,继承,迁移,渴望,懒惰,显式加载,验证,跟踪更改,彩色实体,第一个示例,数据注释,Fluent API,种子数据库,代码优先迁移,多个DbContext,嵌套实体类型。

在实体框架5中引入了空间类型支持.还包括一组运算符,以允许查询分析空间数据.例如,查询可以根据两个地理位置之间的距离进行过滤.

  • 实体框架将允许新的空间数据类型要在类上公开属性并将它们映射到数据库中的空间列.

  • 您还可以编写使用空间运算符根据数据库中执行的空间计算进行过滤,排序和分组.

有两种主要的空间数据类型和减号;

  • 地理数据类型存储椭圆体数据,例如GPS纬度和经度坐标.

  • 几何数据类型代表欧几里德(平面)坐标系.

我们来看看进入下面的板球场示例.

第1步 : 从File&rarr创建新项目;新的 → 项目菜单选项.

第2步 : 在左侧窗格中,选择控制台应用程序.

Cricket Project

第3步 : 右键单击项目名称,然后选择Manage NuGet Packages ...

NuGet Project

第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 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

我们建议你执行上面的例子为了更好地理解,一步一步地进行.