1、EF等ORM解决方案出现的原因

因为软件开发中分析和解决问题的方法已经接近成熟,然后关系型数据库却没有,很多年来,数据依然是保存在表行列这样的模式里,所以,在面相对象和高度标准化的数据库中产生了一个失配(不匹配、阻抗失配,微软的安德斯.海尔斯伯格<C#之父>可能会这样叫它),为了解决这个失配,大多数项目中都会引入"数据处理层"来转换应用程序实体层的数据到数据库的行和列中,随着"数据处理层"的不断进化,最后ORM就诞生了。

2、集成查询语言LINQ

LINQ和EF都出自于微软,都能帮助我们解决失配的问题.使用EF等实体框架,我们能在设计器中(Model First)或者代码(Code First)对领域实体进行建模.还能建立实体类之间的关系。面对这些实体类以及他们之间的关系,我们通过构建LINQ查询来应对,LINQ允许我们在代码中使用实体类以及他们之间的关系来表达关系数据库中的概念。EF+LINQ的开发方式能帮助我们极大的减少工作量.相对于大量的、高度冗余的Ado.Net数据访问方式,使用LINQ查询来表达我们对数据需求更加的合适,EF等实体框架会帮你们实现实体类到底层数据库的映射。

3、实体框架的历史

版本1.0:它只提供了ORM最基本的特性,只实现了"数据库优先"的方案(DataBase First)

版本4.0:版本4.0实现了"模型优先"的方案,提供了对简单的公共语言运行时对象完整的支持,以及数据的延迟加载行为.(Model First)

版本4.1~4.3:实现了"代码优先"的方案.(Code First)

之后的版本:提供了重大的性能改进,并支持了枚举类型,表值函数,空间数据类型,存储过程的一系列改进,以及对asp.net MVC框架的深度支持

版本6.0:提供了查询和更新的异步支持,在代码优先(Code First)中,存储过程支持更新,性能改进,以及一系列的新特性,本书将聚焦这些新特性

4、模型

实体框架是一个强烈关注建模的技术,实体框架创建的是实体数据模型(EDM)的模型,它允许你在编码时使用强类型的实体类,不是关系型数据库中的结构和对象.实体数据模型允许你自定义实体类和关系型数据库表之间的映射.不仅仅是一对一或者类到表的映射.

 在图1-2中,展示了左边的数据库表不直接映射到右边的实体类型(代码中使用)的。实体数据模型中的映射能力使开发者可以使用与问题域(problem domain)高度一至的实体类型集,替代高度结构化的数据库。以设计出高性能、可伸缩、可维护的代码。

  例如,上面图中标注的,Employees,Devices,以及Phone Numbers 在物理存储中是使用的三张不同的表。从DBA(数据库管理员)的观点来看,这是一个完美的场景。但是,从开发人员,或项目相关相关人员的角度来看,employee是一个单一的包含Devices和phone numbers的对象,开发人员编码时使用一个单一的Employee实体类,它包含Devices和Phone Numbers的集合。开发人员不知道也不关心数据库管理员是如何把这个对象分别存储在三张不同的数据库表中的。一旦配置,单一对象和三张数据库之间的映射将被实体框架处理。

  一个相反的情形是,上图中的单表Department被映射成三个代表特定的departments。同样的,开发人员和项目相关人员用一个单独的对象来表示每一个部门(Accounting,Marketing,Finance,等等),但DBA出于对数据在存储的优化,将这三个对象整合到一个单一的数据库表中。

  当然,你能看到上图中的Location表,你能很容易的将它映射到单一的实体类,也这是实体框架的默认行为。

  这里的关键点在,开发人员和项目相关人员使用表示应用程序上下文中的领域实体类,而DBA构建底层的数据库表以求创建高效和数据库。实体框架能很容易地架起两者单的桥梁。

5、分层

实体数据模型包含三层:概念层、存储层、映射层,每个层互不耦合

概念层:实体类包含在数据模型的概念层中,这一层为开发人员和项目相关人员所使用,概念层能通过设计器(Model First)和代码建模(Code First).概念层的语法是通过概念架构定义语言(CSDL)来定义的

映射层:映射层定义概念层和存储层之间的映射,该层定义类的属性如何映射到数据表中的列.映射规格语言(MSL)来定义

存储层:将应用程序中的对象映射到某一存储系统中,实体框架中的数据模型定义表、列,关系以及映射到底层数据库中的数据类型.存储架构定义语言(SSDL)定义了存储模型的语法。

6、实体属性

一个实体类型拥有一个或者多个属性,像一个类,属性分为标量属性、导航属性

标量属性:像integer,string等简单类型就是标量属性,也可以是复杂类型

导航属性:是指跟其它实体有关联的属性(数据库中的外键关系)

7、上下文对象

下文对象为ObjectContext对象,现在,实体框架支持另一个最新的名为DbContext的上下文对象。DbContext大大简单化了使用实体框架的体验。有趣的是,DbContext是ObjectContext的一个包装器或者外观实现者。以一种直观的、友好的、有效的方式暴露底层ObjectContext的功能。

EF基础知识小记一的更多相关文章

  1. EF基础知识小记四(数据库=>模型设计器)

    EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中.为了能快速的模拟这个过程,给出一下建 ...

  2. EF基础知识小记七(拆分实体到多个表以及拆分表到多个实体)

    一.拆分实体到多个表 1.在日常开发中,会经常碰到一些老系统,当客户提出一些新的需求,这些需求需要在原来的表的基础上加一些字段,大多数人会选择通过给原表添加字段的方式来完成这些需求,方法,虽然可行,但 ...

  3. EF基础知识小记六(使用Code First建模自引用关系,常用于系统菜单、文件目录等有层级之分的实体)

    日常开发中,经常会碰到一些自引用的实体,比如系统菜单.目录实体,这类实体往往自己引用自己,所以我们必须学会使用Code First来建立这一类的模型. 以下是自引用表的数据库关系图: ok,下面开始介 ...

  4. EF基础知识小记五(一对多、多对多处理)

    本文主要讲EF一对多关系和多对多关系的建立 一.模型设计器 1.一对多关系 右键设计器新增关联 导航属性和外键属性可修改 2.多对多关系 右键设计器新增关联 模型设计完毕之后,根据右键设计器根据模型生 ...

  5. EF基础知识小记三(设计器=>数据库)

    本文主要介绍通过EF的设计器来同步数据库和对应的实体类.并使用生成的实体上下文,来进行简单的增删查该操作 1.通过EF设计器创建一个简单模型 (1).右键目标项目添加新建项 (2).选择ADO.Net ...

  6. EF基础知识小记二

    1.EF的常用使用场景 (1).维护一个已经存在的数据库,VS提供了工具帮助我们把数据库中的表和视图等对象导入到实体框架.        [数据库=>模型(Database First)] (2 ...

  7. Linq基础知识小记四之操作EF

    1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...

  8. web基础知识小记

  9. C++基础知识小记

    最近在帮华为接口人研究自动化部署项目AutoDeploy,把代码发给我了,不过都是用C++写的,自己虽然在大学也学了一学期的C++不过也是很菜鸟,只是学了基本语法,还远未达到实战项目,不管怎么说就是撸 ...

随机推荐

  1. BeanUtils.populate的方法的作用

    BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下: 完整方法: BeanUtils.populate( Ob ...

  2. (并查集) Wireless Network --POJ --2236

    链接: http://poj.org/problem?id=2236 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...

  3. B-tree B+tree B*Tree

    具体讲解之前,有一点,再次强调下:B-树,即为B树.因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解.如人们可能会以为B-树 ...

  4. node 问题

    安装:使用.msi直接安装就好,环境变量已经设置好了 1.问题:验证node是否正确安装 办法:直接计算1+1:创建服务器. 在项目文件夹的路径下,输入node命令,会看到一个提示符,这里只能输入直接 ...

  5. Python学习-22.Python中的函数——type

    type函数可以检测任何值或变量的类型. 例子: def printType(var): print(type(var)) class TestClass: pass printType(1) pri ...

  6. WPF核心对象模型-类图和解析

    DispatcherObject是根基类,通过继承该类,可以得到访问创建该对象的UI线程的Dispatcher对象的能力.通过Dispatcher对象,可以将代码段合并入该UI线程执行. Depend ...

  7. Spring Boot 应用系列 1 -- Spring Boot 2 整合Spring Data JPA和Druid,双数据源

    最近Team开始尝试使用Spring Boot + Spring Data JPA作为数据层的解决方案,在网上逛了几圈之后发现大家并不待见JPA,理由是(1)MyBatis简单直观够用,(2)以Hib ...

  8. Sending Email In .NET Core 2.0

    Consider the following written in .NET Core 2.0. SmtpClient client = ) { UseDefaultCredentials = tru ...

  9. LeetCode146:LRU Cache

    题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the ...

  10. TSQL--按某字段列分组,在将各组中某列合并成一行

    鉴于群里很多同事在问这个问题,我简单写个Demo,希望对初学者有帮助! 无真相,无解说,不解释,直接上Code! --========================================= ...