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 704 div1

    1.对于一棵树上的一个节点$u$,定义$f(u)$表示树上距离$u$最远的节点到$u$的距离.给出每个节点的$f$值,构造出这棵树. 思路:找到树的主干,然后不在主干上的节点一定可以连接到主干的某个节 ...

  2. uniGUI试用笔记(四)

    uniGUI下有专用的登录窗体类:TUniLoginForm,该类属于AppForm,构建代码为: function frmWebLogin: TfrmWebLogin; begin Result : ...

  3. P3899 [湖南集训]谈笑风生

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3653 https://www.luogu.org/problemnew/show/P38 ...

  4. LightOJ 1030 Discovering Gold(概率DP)题解

    题意:1~n每格都有金子,每次掷骰子,掷到多少走几步,拿走那格的金子,问你金子的期望 思路:dp[i]表示从i走到n金子的期望,因为每次最多走1<=x<=6步,所以dp[i] = a[i] ...

  5. Baseline

    Baseline Baselines an existing database, excluding all migrations upto and including baselineVersion ...

  6. js希尔排序

    function shellSort (arr) { var len = arr.length; var increment = Math.floor(len/2); while(increment! ...

  7. How to resize slide dimensions without resizing any objects on the slide?

    IF you are competent to unzip the pptx file and modify the XML it can be done, the slide size will c ...

  8. P2617 Dynamic Rankings(带修主席树)

    所谓带修主席树,就是用树状数组的方法维护主席树的前缀和 思路 带修主席树的板子 注意数据范围显然要离散化即可 代码 #include <cstdio> #include <cstri ...

  9. Twitter开发

    开发文档:https://developer.twitter.com/ the Twitter Developer Account Application 示例:https://wptweetboos ...

  10. tcpdump使用方法

    TcpDump可以将网络中传送的数据包完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息. 工作中使用tcpdump命令抓 ...