Entity Framework 空间数据类型

发布于 2024-08-30 11:36:12 字数 3095 浏览 10 评论 0

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

  • 实体框架将允许新的空间数据类型作为类的属性公开,并将它们映射到数据库中的空间列。
  • 您还将能够编写 LINQ 查询,这些查询利用空间运算符基于数据库中执行的空间计算进行过滤,排序和分组。

有两种主要的空间数据类型

  • 地理数据类型存储椭球数据,例如 GPS 纬度和经度坐标。
  • 几何数据类型表示欧几里得(平面) 坐标系。

让我们看一下下面的板球场示例。

步骤 1-从文件→新建→项目菜单选项创建新项目。

步骤 2-在左窗格中,选择控制台应用程序。

板球项目

步骤 3-右键单击项目名称,然后选择管理 NuGet 软件包…

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

我们建议您逐步执行上述示例,以更好地理解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

烟若柳尘

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文