《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍
Visual Studio
我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成、支持软件开发整个生命周期的多语言环境。 Visual Studio以及它发布的工具和服务提供了:设计、开发、单元测试、调试、软件配置和管理、构建管理和持续集成等等。很少有开发人员因为还没有使用它而担心(注:作者应该是表达不用担心VS的能力),Visual Studio是一个完整的工具集。Visual Studio在开发应用实体框架的应用程序中起着至关重要的作用。
Visual Studio为实体框架模型提供了一个集成的设计器,使用它提供的工具,你可以从头创建或者从已存在的数据库创建模型。当然,你可以选择不使用设计器,纯手工来创建实体类型和配置。
多数情况下,我们拥有一个已经存在的应用和数据库,VisualStudio为我们提供了工具,它可以帮我们把数据库中的表和关系导入到实体框架模型。这非常适合我们,因为很少有人会奢侈选择开发一个崭新的应用程序。多数情况下我们是维护、扩展、改进一个已存在的代码和数据库。
你可以在计器中创建一个空模型,然后从头开始增加实体类型、类型间的关联以及承继体系到设计器中。 当你创建好模型后,你可以右键设计器,然后从菜单中选择从模型创建数据库。
如果你的项目团队是以代码为中心的,你可以在不使用设计器的情况下手工创建一系列的领域类、它们之间的关系、上下文对象,然后把这些类和实体框架引擎关联起来。
一旦创建好模型,改动是经常发生的,因为这对软件开发来说是再自然不过的事。Visual Studio提供了工具帮我们从数据库更新我们的模型,这会使模型和数据库同步。另外,实体框架开发团队还为我们提供了一个名为代码优先迁移(Code First Migrations)工具,它能让数据库保持你模型中最新的修改。
1-2 使用实体框架
实体框架紧紧地和Visual Studio集成在一起,为了在你的应用程序中使用实体框架,我们增加一个ADO.NET实体数据框架到你的项目。方法如下:右键你的项目,然后选择 ➤New Item(新建项)。在弹出的对话框中(如图1-4),选择Data(数据)模板下边的ADO.NET Entity Date Model(实体数据模型)模板。然后单击Add(增加)打开数据模型创建导向。

图1-4 向项目中添加实体数据模型
在第一页向导中有两个选项: start with an existing database (从一个已存的数据创建);start with an empty model(创建一个空模型)。(前者的选项标签实际为“Generate from database”),如图1-5。

图1-5实体数据模型向导给出从已存在的数据库创建和创建空模型选择
从已存在数据库创建模型是数据库优先(Database-First)方案。从你选择的数据库的表、视图、存储过程,向导会为创建好模型和用于编码的实体类。立马得到的好处就是,你可以在编码中使用实体框架从数据库中的表和列映射到模型中的强类型的实体类。如果数据库中的表间是有关系的,他们会被建模成关联。如果你有一个已经存在的数据库,这是为你的应用创建实体数据模型的一种方式。然而,如果你喜欢使用代码优先(Code-First)方案从一个已存在的数据库创建模型,不用担心,实体框架开发团队已经创建了强有力的工具集(The Entity Framework Power Tools),它通过逆向工程,从一个存在的数据库创建领域实体类,就像你手工敲出来的一样。
如果你开发一个崭新的应用,没有已存在的数据库,你同样也可以选择实体框架设计器。先创建一个空的模型,然后通过右键创建实体类型、关联、继承。也可以从工具箱中拖拽到设计器中创建它们。一旦建模完成,你就可以右键设计器选择 Generate Database from Model(从模型创建数据库)菜单项。它会产生一个用来创建数据库表、关系的脚本。
你也可以在Visual Studio中手工创建每一个实体类,然后在DbContext上下文对象中注册它们,这样就能和实体框架服务相衔接。实体框架映射这些实体类到底层的数据库,并在运行时,于内存中自动创建一个模型。
模型优先(Model-First)或者数据库优先(Database-First),使用实体框架设计器建模。其中的关键点如图1-6所示。在这个模型中,Customer 和 Order拥有一对多关联,每一个Customer可能有多个Orders,但是每个Order只能关联一个Customer.映射详细信息窗口显示一个实体类型的Customer映射到底层数据库中的Customer表。该窗口同时也显示了,Customer表中的列映射到实体类型Customer中的标量属性(Scalar Proerties).记住,在实体框架中,你能使用数据注解或者代码优先(Code-First)中的API特性来创建同样的映射。

图1-6设计器建模中的关键点
当然,设计器建模中的关键点远不止图1-6所呈现的,本书将覆盖设计器建模的方方面面。某些情况下,会超出设计器的能力范围,本书将展示通过修改底层的.edmx文件来处理这类情况。该文件包含了完整的模型定义,包含概念层、存储逻辑层、映射层。
所以,无论我们在实体框架中使用数据库优先(Database-First)、模型优先(Model-First)、代码优先(Code-First),我最终都需要使用一个模型。我们获得了较高的生产率,因为在编码时,我们可以像使用应用程序中别的普通对象一样使用模型(实体类),如图1-6所示,在许多情况,你可以像使用应用程序中别的普通对象一样使用Customer和Order对象。
如果你想插入一个新的customer 和 order到数据库中,你可以创建Customer和Order类型的一个实例,设置它们的属性。然后将其添加到内存中代表模型的上下文对象中。最后调用Savechanges()方法保存。所需要的SQL语句将被自动生成并发送到数据库中实现插入一行。获取数据库中的customers和orders,你可以根据模型中的实体类型和关联,使用LINQ或者实体SQL创建一个查询来实现。
贯穿本书的技巧将一步一步地向你展示,如何在几乎所有能想到的数据库上建模的场景;如何通过模型实现查询、插入、更新和删除。以及在各种各样的应用程序中如何运用实体框架。
第一章,到此结束。如果你觉得不错,就请点击右下边的推荐,以便与更多的人分享。
实体框架交流QQ群: 458326058,欢迎有兴趣的朋友加入一起交流
谢谢大家的持续关注,我的博客地址:http://www.cnblogs.com/VolcanoCloud/
《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍的更多相关文章
- 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述
微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...
- Entity Framework 6 Recipes 2nd Edition(13-2)译 -> 用实体键获取一个单独的实体
问题 不管你用DBFirst,ModelFirst或是CodeFirst的方式,你想用实体键获取一个单独的实体.在本例中,我们用CodeFirst的方式. 解决方案 假设你有一个模型表示一个Paint ...
- 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
- 《Entity Framework 6 Recipes》中文翻译 ---- 系列教程
为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...
- Entity Framework 6 Recipes 2nd Edition(目录索引)
Chapter01. Getting Started with Entity Framework / 实体框架入门 1-1. A Brief Tour of the Entity Framework ...
- 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (12) -----第三章 查询之使用SQL语句
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-2使用原生SQL语句更新 问题 你想在实体框架中使用原生的SQL语句,来更新底层 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (13) -----第三章 查询之使用Entity SQL
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-4使用实体SQL查询模型 问题 你想通过执行Entity SQL语句来查询你的实 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (16) -----第三章 查询之左连接和在TPH中通过派生类排序
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-10应用左连接 问题 你想使用左外连接来合并两个实体的属性. 解决方案 假设你有 ...
随机推荐
- Python 学习第十六天 html 前端内容总结
一,css知识总结 1, css属性 css的属性包括以下内容 position:规定元素的定位类型 background:属性在一个声明中设置所有的背景属性 可以设置的如下属性: (1)back ...
- 【CentOS】LAMP相关4
MySQL不支持TAB补全.mysql_history命令历史 用SOCKET形式登陆:mysql -uroot -p123456,mysql -uroot -p123456 -S /var/lib/ ...
- mac下安装mysql教程
由于更换了mac电脑,需要装一个mysql,经过各种资料的翻阅,各种踩坑,终于装完了,记录一下,方便大家参照: 1.下载最新的mysql安装包,下载地址:http://dev.mysql.com/do ...
- Jedis 使用范例
public class RedisUtil { Logger logger = LoggerFactory.getLogger(RedisUtil.class); private JedisPool ...
- [资料分享]nutch视频教程
- C++ 结构体数组回调C#代码,c#数组只有一条
C# 方法 [UnmanagedFunctionPointerAttribute(CallingConvention.StdCall, CharSet = CharSet.Ansi)] public ...
- javascript系列:NaN类型
NaN,即非数值是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况下. ECMAScript中任何数值除以0会返回NaN,因此不影响其他代码运行. NaN特点: ...
- windows下面安装Python和pip终极教程
在大二的时候接触过一段时间的Python,最近又开始玩起了这门语言.总的来说,个 人很喜欢Python的语言风格,但是这门语言对于windows并不算很友好,因为如果是初学者在windows环境下安装 ...
- postman发送带cookie的http请求
1:需求:测试接口的访问权限,对于某些接口A可以访问,B不能访问. 2:问题:对于get请求很简单,登录之后,直接使用浏览器访问就可以: 对于post请求的怎么测试呢?前提是需要登录态,才能访问接口. ...
- Qgis连接Oracle
CMake编译中选择编译Oracle一项以后,编译的qgis才会有连接Oracle数据库的功能. 编译qgis以后,可以通过添加矢量图层中选择Oracle数据库,或是添加Oracle空间图层,或是添加 ...