- 实体框架教程
- 实体框架 - 首页
- 实体框架 - 概述
- 实体框架 - 架构
- 实体框架 - 环境设置
- 实体框架 - 数据库设置
- 实体框架 - 数据模型
- 实体框架 - DbContext
- 实体框架 - 数据类型
- 实体框架 - 关系
- 实体框架 - 生命周期
- 实体框架 - 代码优先方法
- 实体框架 - 模型优先方法
- 实体框架 - 数据库优先方法
- 实体框架 - 开发方法
- 实体框架 - 数据库操作
- 实体框架 - 并发
- 实体框架 - 事务
- 实体框架 - 视图
- 实体框架 - 索引
- 实体框架 - 存储过程
- 实体框架 - 脱机实体
- 实体框架 - 表值函数
- 实体框架 - 原生SQL
- 实体框架 - 枚举支持
- 实体框架 - 异步查询
- 实体框架 - 持久化
- 实体框架 - 投影查询
- 实体框架 - 命令日志
- 实体框架 - 命令拦截
- 实体框架 - 空间数据类型
- 实体框架 - 继承
- 实体框架 - 迁移
- 实体框架 - 渴望加载
- 实体框架 - 延迟加载
- 实体框架 - 显式加载
- 实体框架 - 验证
- 实体框架 - 跟踪更改
- 实体框架 - 彩色实体
- 实体框架 - 代码优先方法
- 实体框架 - 第一个示例
- 实体框架 - 数据注解
- 实体框架 - Fluent API
- 实体框架 - 填充数据库
- 实体框架 - 代码优先迁移
- 实体框架 - 多个DbContext
- 实体框架 - 嵌套实体类型
- 实体框架资源
- 实体框架 - 快速指南
- 实体框架 - 有用资源
- 实体框架 - 讨论
实体框架 - 空间数据类型
实体框架 5 中引入了空间类型支持。还包含一组运算符,允许查询分析空间数据。例如,查询可以根据两个地理位置之间的距离进行过滤。
实体框架允许将新的空间数据类型作为属性公开在您的类上,并将它们映射到数据库中的空间列。
您还可以编写利用空间运算符的 LINQ 查询,以便根据在数据库中执行的空间计算进行过滤、排序和分组。
主要有两种空间数据类型:
geography 数据类型存储椭球数据,例如 GPS 纬度和经度坐标。
geometry 数据类型表示欧几里得(平面)坐标系。
让我们来看一下板球场的例子。
步骤 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<TEntity> 属性。
在 Program.cs 中添加上下文定义。
public partial class CricketGroundContext : DbContext {
public DbSet<CricketGround> 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
我们建议您逐步执行上述示例以更好地理解。
广告