本文大部分内容截取自博客:  http://www.cnblogs.com/VolcanoCloud/p/4475119.html  

  (一) 为什么用ORM

  处理关系数据库时,我们依据由行和列组成的表,它高度结构化且擅长处理记录集。在面向对象编程被广泛接受之前,我们使用“procedurally(过程化)”的思维并通过编写结构化的、自上而下的、一个一个的函数来解决问题。它们完美对应:在代码中,表、行、列和结构化、过程化模式完美匹配。这样的情况,持续了很长一段时间。

  在编码方面,我们现在使用面向对象和领域模型,架构、设计和编码都对应于现实世界中的事情,比如客户和订单。我们在白板上写出问题域(problem space)中的名词,通过绘制它们之间的连线来表示关联和交互。并以此作为规范和给开发团队分配工作的依据。总之,架构、设计、和编码是基于概念层,已经和关系型数据库的组织和逻辑有很大的差别。

  软件开发中分析和解决问题的方法已经进化成熟,然而关系型数据库却没有。很多年来,数据依然是保持在表、行、列这样模式里。不幸的是,它在面向对象继承和高度标准化的关系型数据库中产生了一个失配(阻抗失配,微软的安德斯.海尔斯伯格<C#之父>可能会这样叫它)。

  为了应对这一差距,项目中经常引入“数据库层(database layer)”来转换应用程序领域实体类中数据到表中的行和列进行保存。由此产生了许多商业和开发的数据库访问框架。他们都希望在进化式的开发和结构化数据中架起一座桥。有趣的是,一个新的解决方案-对象关系映射(ORM)产生了。

  实体框架,以及集成查询语言(LINQ)框架,他们均出自微软,使我们能处理抗阻失配问题。使用实体框架,我们能在设计器或是代码中直接对领域实体类进行建模。还能建立实体类之间的关系。面对这些实体类以及他们之间的关系我们构建LINQ查询来应对,LINQ允许我们在代码中使用实体类以及他们之间的关系来表达关系型数据库中的概念。这些在帮助我们减少开发工作量的同时,还有助于简化我们的开发体验。相对大量、高度冗余代码的ADO.NET数据访问方式,我们使用LINQ查询来表达我们对数据的需求。使用面向实体对象编程方式代替面向高度结构化的关系型数据库开发方式,实体框架会帮你实现实体类到底层数据库的映射。

  

  (二) 使用VS进行开发

  我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成、支持软件开发整个生命周期的多语言环境。 Visual Studio以及它发布的工具和服务提供了:设计、开发、单元测试、调试、软件配置和管理、构建管理和持续集成等等。很少有开发人员因为还没有使用它而担心(注:作者应该是表达不用担心VS的能力),Visual Studio是一个完整的工具集。Visual Studio在开发应用实体框架的应用程序中起着至关重要的作用。

  Visual Studio为实体框架模型提供了一个集成的设计器,使用它提供的工具,你可以从头创建或者从已存在的数据库创建模型。当然,你可以选择不使用设计器,纯手工来创建实体类型和配置。

  多数情况下,我们拥有一个已经存在的应用和数据库,VisualStudio为我们提供了工具,它可以帮我们把数据库中的表和关系导入到实体框架模型。这非常适合我们,因为很少有人会奢侈选择开发一个崭新的应用程序。多数情况下我们是维护、扩展、改进一个已存在的代码和数据库。

  你可以在计器中创建一个空模型,然后从头开始增加实体类型、类型间的关联以及承继体系到设计器中。 当你创建好模型后,你可以右键设计器,然后从菜单中选择从模型创建数据库。

  如果你的项目团队是以代码为中心的,你可以在不使用设计器的情况下手工创建一系列的领域类、它们之间的关系、上下文对象,然后把这些类和实体框架引擎关联起来。

  一旦创建好模型,改动是经常发生的,因为这对软件开发来说是再自然不过的事。Visual Studio提供了工具帮我们从数据库更新我们的模型,这会使模型和数据库同步。另外,实体框架开发团队还为我们提供了一个名为代码优先迁移(Code First Migrations)工具,它能让数据库保持你模型中最新的修改。

  (三) EF的三种approach

  从已存在数据库创建模型是数据库优先(Database-First)方案。从你选择的数据库的表、视图、存储过程,向导会为创建好模型和用于编码的实体类。立马得到的好处就是,你可以在编码中使用实体框架从数据库中的表和列映射到模型中的强类型的实体类。如果数据库中的表间是有关系的,他们会被建模成关联。如果你有一个已经存在的数据库,这是为你的应用创建实体数据模型的一种方式。然而,如果你喜欢使用代码优先(Code-First)方案从一个已存在的数据库创建模型,不用担心,实体框架开发团队已经创建了强有力的工具集(The Entity Framework Power Tools),它通过逆向工程,从一个存在的数据库创建领域实体类,就像你手工敲出来的一样。

  如果你开发一个崭新的应用,没有已存在的数据库,你同样也可以选择实体框架设计器。先创建一个空的模型,然后通过右键创建实体类型、关联、继承。也可以从工具箱中拖拽到设计器中创建它们。一旦建模完成,你就可以右键设计器选择 Generate Database from Model(从模型创建数据库)菜单项。它会产生一个用来创建数据库表、关系的脚本。

  

我自己在工作当中或多或少都接触到了EF的使用,也将自己的所学所得总结出来,方便自己也请他人帮助斧正.

ORM之EF的更多相关文章

  1. 分库分表、读写分离——用Sql和ORM(EF)来实现

    分库:将海量数据分成多个库保存,比如:2017年的订单库——Order2017,2018年的订单库——Order2018... 分表:水平分表(Order拆成Order1.....12).垂直分表(O ...

  2. ORM框架EF

    应用程序和数据库采用Tcp协议通讯 ORM框架有: NHibernate ,Dapper ,Mybatis 底层是 ADO.Net 好处: 1.面向对象 2.没有sql减少学习成本,快速开发 3.编译 ...

  3. MVC系列学习(二)-初步了解ORM框架-EF

    1.新建 一个控制台项目 2.添加一个数据项 a.选择数据库 注:数据库中的表如下: b.选择EF版本 c.选择表 3.初步了解EF框架 看到了多了一个以 edmx后缀的文件 在edmx文件上,右击打 ...

  4. ORM之EF初识

    之前有写过ef的codefirst,今天来更进一步认识EF! 一:EF的初步认识 ORM(Object Relational Mapping):对象关系映射,其实就是一种对数据访问的封装.主要实现流程 ...

  5. ORM框架 EF - code first 的封装

    Code first 是Microsoft Entity Framework中的一种模式,CodeFirst不会有可视化的界面来进行拖动编辑DataBase-Entity,但会以一个类来进行对数据表关 ...

  6. ORM框架 EF - code first 的封装 优化一

    上一节我们讲到对EF(EntityFramework)的初步封装,任何事情都不可能一蹴而就,通过大量的实际项目的实战,也发现了其中的各种问题.在这一章中,我们对上一章的EF_Helper_DG进行优化 ...

  7. ORM 之 EF的使用(一)

    早期对数据库进行操作 通过Ado.Net 操作数据库 需要操作sqlCommand/sqlConnection/adapter/datareader 如图 后来 基于面向对象的思想 出现了中间件ORM ...

  8. 模拟EF CodeFist 实现自己的ORM

    一.什么是ORM 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单来说,ORM 是通过使用描述对象 ...

  9. ASP.NET MVC学习---(一)ORM框架,EF实体数据模型简介

    现如今 对象关系映射(ORM)框架 被大量的使用于企业级应用的开发 为什么要使用ORM? ADO.NET操作数据库不好吗? 我们可以仔细想想 当我们使用ADO.NET操作数据库的时候 我们需要先获取连 ...

随机推荐

  1. 检测FTP服务并开启FTP服务

    1. 检测FTP服务是否开启 1.1. 通过查询提供FTP服务的进程是否存在,并未找到任何包含ftp关键字的进程信息,可判断服务未开启. root@lb- ~ # ps -ef | grep ftp ...

  2. plsql注册-转

    注册码:Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769 password:xs374ca https://blo ...

  3. java之异常统一处理

    spring-mvc.xml <!-- aop --> <aop:aspectj-autoproxy/> <beans:bean id="controllerA ...

  4. 怎样从外网访问内网WebSphere?

    本地安装了一个WebSphere,只能在局域网内访问,怎样从外网也能访问到本地的WebSphere呢?本文将介绍具体的实现步骤. 准备工作 安装并启动WebSphere 默认安装的WebSphere端 ...

  5. to refactor for refactor

    v1.1 if all algorithm are in one function, it will expand. so each operate type should be separated. ...

  6. mysql 查询重复值

     SELECT `code`,count(`code`) as count   FROM `yt_coupon`   GROUP BY `code` HAVING count(`code`) > ...

  7. centos7.2 开机启动脚本

    vim ~/.bashrc 然后最后一行添加 source /etc/profile 一.添加开机自启服务 在CentOS 7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例):sys ...

  8. php 通过array_merge()和array+array合并数组的区别和效率比较

    众所周知合并两个数组可以使用array_merge(),这是php提供的一个函数.另外还可以通过 array 的方式来合并数组,这两种直接有什么区别,哪一个的效率更高呢? array_merge() ...

  9. PHP实现的自定义图像居中裁剪函数示例

    图像居中裁减的大致思路: 1.首先将图像进行缩放,使得缩放后的图像能够恰好覆盖裁减区域.(imagecopyresampled ― 重采样拷贝部分图像并调整大小) 2.将缩放后的图像放置在裁减区域中间 ...

  10. 面试题:JS中map的陷阱

    题目: ['2', '3', '4'].map(parseInt); 请说出上面代码的执行结果 错误回答: [2, 3, 4] 真正答案: [2, NaN, NaN] 解析: 因为 map 的算子是有 ...