Data Access and Storage > 学习 > Entity Framework > 开始操作 > 空间 - EF 设计器

本视频和分步演练介绍如何使用实体框架设计器来映射空间类型。另外,还演示了如何使用 LINQ 查询来查找两个位置之间的距离。

本演练将使用 Model First 来创建一个新数据库,但也可以将 EF 设计器与  Database First 工作流结合使用来映射到现有数据库。

空间类型支持在实体框架 5 中引入。注意:要使用空间类型、枚举和表值函数等新特性,开发时必须面向 .NET Framework 4.5。Visual Studio 2012 默认面向 .NET 4.5。

要使用空间数据类型,您还必须使用提供空间支持的实体框架提供程序。有关更多信息,请参见 空间类型的提供程序支持

存在两种主要的空间数据类型:地理和几何。地理数据类型用于存储椭球数据(例如,GPS 纬度和经度坐标)。几何数据类型则用于表示欧几里德(扁平)坐标系统。

                                                                             
下一个
0

Entity Framework Spatial - EF Designer
Learn how to map DbGeography and DbGeometry spatial types with the Entity Framework Designer.
共享
 
 
 
Entity Framework Spatial - EF Designer
 

Learn how to map DbGeography and DbGeometry spatial types with the Entity Framework Designer.

日期 12/8/3,                                     时长 3:25,                                     观看人次 9934

视频作者:                                                               MSDN Product Group

 

更多视频选项 — 包括下载

必备条件

为完成本演练,需要安装 Visual Studio 2012 的旗舰版、高级版、专业版或 Web Express 版本。

设置项目

  1. 打开 Visual Studio 2012
  2. 在“文件”菜单上指向“新建”,再单击“项目”
  3. 在左窗格中单击“Visual C#”,然后选择“控制台”模板
  4. 输入 SpatialEFDesigner 作为项目名称,然后单击“确定”

使用 EF 设计器创建新模型

  1. 在解决方案资源管理器中右键单击项目名称,指向“添加”,然后单击“新建项”
  2. 从左侧菜单中选择“数据”,然后在“模板”窗格中选择“ADO.NET 实体数据模型”
  3. 输入 UniversityModel.edmx 作为文件名,然后单击“添加”
  4. 在“实体数据模型向导”页上的“选择模型内容”对话框中选择“空模型”
  5. 单击“完成”

显示实体设计器,为模型编辑提供设计图面。

该向导执行下列操作:

  • 生成定义概念模型、存储模型以及二者之间的映射的 EnumTestModel.edmx 文件。将 .edmx 文件的“元数据项目处理”属性设置为“嵌入输出程序集中”,以便生成的元数据文件嵌入到程序集中。
  • 添加对以下程序集的引用:EntityFramework、System.ComponentModel.DataAnnotations 和 System.Data.Entity。
  • 创建 UniversityModel.tt 和 UniversityModel.Context.tt 文件,将它们添加到 .edmx 文件下面。这些 T4 模板文件生成的代码用于定义 DbContext 派生类型和映射到 .edmx 模型中的实体的 POCO 类型

新增实体类型

  1. 右键单击设计图面上的空区域,选择“添加” ->“实体”,随即出现“新建实体”对话框
  2. 指定 University 作为类型名称,指定 UniversityID 作为键属性名称,将类型保留为 Int32
  3. 单击“确定”
  4. 右键单击该实体,然后选择“新增”->“标量属性”
  5. 将新属性重命名为 Name
  6. 添加其他标量属性,将其命名为 Location 打开“属性”窗口,将新属性的类型更改为 Geography
  7. 保存模型并生成项目 注意:生成时,“错误列表”中可能会出现有关未映射的实体和关联的警告。可以忽略这些警告,因为在我们选择从模型生成数据库之后,这些错误就会消失。

根据模型生成数据库

现在,可生成一个基于模型的数据库。

  1. 在设计图面上的空白处右键单击,然后选择“根据模型生成数据库”
  2. 将显示“生成数据库向导”的“选择您的数据连接”对话框 单击“新建连接”按钮 指定 (localdb)\v11.0 作为服务器名称,University 作为数据库,然后单击“确定”
  3. 将弹出一个询问是否需要创建新数据库的对话框,请单击“是”。
  4. 单击“下一步”,“创建数据库向导”生成用于创建数据库的数据定义语言 (DDL) 生成的 DDL 显示在“摘要和设置”对话框中 请注意,DDL 不包含映射到枚举类型的表的定义
  5. 单击“完成” 单击“完成”不会执行 DDL 脚本。
  6. “创建数据库向导”执行以下操作: 在 T-SQL 编辑器中打开 UniversityModel.edmx.sql 生成 EDMX 文件的存储架构和映射部分 向 App.config 文件添加连接字符串信息
  7. 在 T-SQL 编辑器中右键单击,然后选择“执行” 出现“连接到服务器”对话框,输入步骤 2 中的连接信息,然后单击“连接”
  8. 若要查看生成的架构,请在 SQL Server 对象资源管理器中右键单击数据库名称,然后选择“刷新”

保存和检索数据

打开定义了 Main 方法的 Program.cs 文件。在 Main 函数中,添加以下代码。

这段代码向上下文中添加了两个新的 University 对象。空间属性使用 DbGeography.FromText 方法进行初始化。表示为 WellKnownText 的地理点传入该方法。接着,该代码保存数据。然后,构造并执行 LINQ 查询,该查询返回一个位置相距特定位置最近的 University 对象。

using (var context = new UniversityModelContainer())  {      context.Universities.Add(new University()      {          Name = "Graphic Design Institute",          Location = DbGeography.FromText("POINT(-122.336106 47.605049)"),      });            context.Universities.Add(new University()      {          Name = "School of Fine Art",          Location = DbGeography.FromText("POINT(-122.335197 47.646711)"),      });        context.SaveChanges();        var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)");        var university = (from u in context.Universities                                  orderby u.Location.Distance(myLocation)                                  select u).FirstOrDefault();        Console.WriteLine(          "The closest University to you is: {0}.",          university.Name);  }

编译并运行应用程序。该程序生成以下输出:

The closest University to you is: School of Fine Art.

若要查看数据库中的数据,请在 SQL Server 对象资源管理器中右键单击数据库名称,然后选择“刷新”。然后,右键单击表,然后选择“查看数据”。

摘要

本演练介绍了如何使用实体框架设计器来映射空间类型以及如何在代码中使用空间类型。

EF学习-获取实体框架01

实体框架由 EF 设计器(包含在 Visual Studio 中)和 EF Runtime(在 NuGet 上提供)组成。

EF 设计器包含在 Visual Studio 中

最新版本的实体框架设计器包含在 Visual Studio 2012 中。

如果您执行的是 Visual Studio 2012 自定义安装,那么您将需要确保 Microsoft Web Developer Tools 或 Microsoft SQL Server Data Tools 已选中,否则 EF 设计器将不会安装。

EF Runtime 在 NuGet 上提供

最新版本的实体框架以 EntityFramework NuGet 包 的形式提供。如果您不熟悉 NuGet 包管理器,建议您阅读 NuGet 概述。如果您正在使用 Visual Studio 2012,那么 NuGet 包管理器已经安装。

安装 EF NuGet 包

通过右键单击项目的“引用”文件夹并选择“管理 NuGet 包…”,可以安装 EntityFramework 包

通过程序包管理器控制台安装

或者,也可以通过在 程序包管理器控制台中运行以下命令来安装 EntityFramework。

PM> Install-Package EntityFramework

安装最新预览版

以上方法将为您提供实体框架最新的完全支持版本。我们通常会提供预发行版实体框架,希望您进行试用并向我们提供反馈。

要安装 EntityFramework 的最新预览版,可以在“管理 NuGet 包”窗口中选择“包括预发行版”。如果没有可用的预发行版,您将会自动获得实体框架最新的完全支持版本。

或者,您也可以在 程序包管理器控制台中运行以下命令。

PM> Install-Package EntityFramework -Pre

安装EF实体模型框架的更多相关文章

  1. Config File Settings Of EF——实体框架的配置文件设置

    我亦MSDN 原文地址 http://msdn.microsoft.com/en-us/data/jj556606 Entity Framework allows a number of settin ...

  2. .NET CORE 学习笔记之安装EF【Microsoft.EntityFrameworkCore】扩展报错

    最近在学习.NET CORE ,刚开始就遇到问题了. 安装EF框架的试试就报错, 报错如下: 错误 程序包还原失败.正在回滚“XXX”的程序包更改. 找了好久的方案,网上也没搜到对应的问题和方案,然而 ...

  3. 【EF 1】EF实体框架 原理+实例

    一.知识回顾 到目前为止,自己学到的链接数据库操作已经经历了几个阶段,分别是:学生信息管理和(第一次)机房收费时的直接连接数据库操作表格,然后是机房个人重构中应用的操作实体,在其中还利用了一个很重要的 ...

  4. EF实体框架之CodeFirst一

    对于SQL Server.MySql.Oracle等这些传统的数据库,基本都是关系型数据库,都是体现实体与实体之间的联系,在以前开发时,可能先根据需求设计数据库,然后在写Model和业务逻辑,对于Mo ...

  5. (转)windows下安装nodejs及框架express

    转自:http://jingyan.baidu.com/article/456c463b60fb380a583144a9.html windows下安装nodejs及框架express nodejs从 ...

  6. EF实体框架之CodeFirst四

    在EF实体框架之CodeFirst二中也提到数据库里面一般包括表.列.约束.主外键.级联操作.实体关系(E-R图).存储过程.视图.锁.事务.数据库结构更新等.前面几篇博客把表.存储过程.视图这些算是 ...

  7. 在VS中安装EF和项目引用EF

    1.通过Visual Studio安装NuGet (1). 打开Visual Studio扩展管理器     (2). 选择联机库,并在搜索中写入NuGet,然后点击搜索结果中NuGet Packag ...

  8. C#.Net EF实体框架入门视频教程

    当前位置: 主页 > 编程开发 > C_VC视频教程 > C#.Net EF实体框架入门视频教程 > kingstone金士顿手机内存卡16G仅65元 1.EF实体框架之增加查 ...

  9. Linux 安装python爬虫框架 scrapy

    Linux 安装python爬虫框架 scrapy http://scrapy.org/ Scrapy是python最好用的一个爬虫框架.要求: python2.7.x. 1. Ubuntu14.04 ...

随机推荐

  1. topcoder srm 708 div1 -3

    1.定义一个字符串s,定义函数$f(s)=\sum_{i=1}^{i<|s|}[s_{i-1}\neq s_{i}]$,给定字符串$p,q$,定义函数$g(p,q)=\sum_{c='a'}^{ ...

  2. vue学习【第三篇】:vue之node.js的简单介绍

    什么是node.js 它是可以运行JavaScript的服务平台,可以吧它当做一门后端程序,只是它的开发语言是JavaScript 安装node.js node.js的特性 - 非阻塞IO模型 - 时 ...

  3. P4556 [Vani有约会]雨天的尾巴

    目录 思路 优化 过程中的问题/疑问 错误 代码 思路 每个节点维护一课线段树(当然是动态开点) 线段树的作用是统计这个节点有多少种粮食型号,以及最多的粮食型号 然后树上差分,u和v点 +1,lca( ...

  4. Java中sort实现降序排序

    利用Collections的reverseOrder方法: import java.util.Arrays; import java.util.Collections; public class Ma ...

  5. Android天坑ImageView控件上下留白原因与解决

    ImageView控件上下留白 如下,误以为是padding的问题.搜索无果 后来发现是需要添加android:adjustViewBounds="true",调整ImageVie ...

  6. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2002 题意: 思路:不会LCT,就只好用分块了. 将这n个数分成根号n块,对于每一块中的每一个数,处 ...

  7. HDU 5988 Coding Contest(浮点数费用流)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5988 题意:在acm比赛的时候有多个桌子,桌子与桌子之间都有线路相连,每个桌子上会有一些人和一些食物 ...

  8. 前端面试题 | JS部分(附带答案)

    目前在找工作,所以各方收集了一堆面试题.其实刷面试题的过程也能更新自己对知识的认识,所以也提醒自己多看多理解.如果对下面题目有更深理解,会实时更新.遇到新题目,也会不定时更新.希望能帮助到部分朋友- ...

  9. 简单实现RN调用原生方法(IOS)

    在React Native中,一个“原生模块”就是一个实现了“RCTBridgeModule”协议的Objective-C类(个人理解RCTBridgeModule就是react与native之间的桥 ...

  10. RN酷炫组件圆形加载

    地址:https://js.coach/react-native/react-native-circular-progress?search=react-native 别谢我 点个赞就行 ## Use ...