ADO.NET Entity Framework简介

转载 2012年03月31日 11:41:10

下一代的ADO.NET的目标是要解决关系数据模型和实际应用程序需要模型之间的鸿沟,那么它是怎么做到的呢?

我们都知道,建立在关系数据库基础之上的应用程序经常需要在不同的表之间做复杂的join操作来取得相关的数据。

比如下面的例子:

           [图1] 

这是一个普通的关系型数据库。这个结构主要描述了雇员的基本信息和雇员的销售情况。

假如我们想取得所有在2006年1月1日招聘过来的全职员工的姓名和职务信息,那么就需要写如下的sql查询语句:

1SELECT c.FirstName, e.Title
2FROM Employee e
3INNER JOIN Contact c ON e.EmployeeID = c.ContactID
4WHERE e.SalariedFlag = 1 AND e.HireDate >= '2006-01-01'
5


我们分析一下这个复杂的sql语句,就会发现它存在如下缺点:

1. 如果某个应用程序只处理Employees的信息,但我们必须将逻辑数据关系标准化。这样我们就不得不去关注数据库表与表之间的关系(比如雇员的联系信息和姓名在不同的表中),我们需要人为地在两个表中做内联交叉查询以得到正确的数据。
2.这里该应用程序仅仅是处理全职雇员(SalariedFlag=1),理想的情况是,我们不应看到其他类型的雇员信息。然而实际上所有的雇员信息都在一个数据库表中,他们是用一个"SalariedFlag"字段来区分的。这就意味着我们需要关注如何将不同类型的雇员加以区分。理想的情况是这样的:假如我们只需要处理某个数据子集,系统只需要呈现这部分子集的数据。开发人员应当能够通过声明来指定哪个是需要的数据子集。

综合地说,首先,关系数据模型不能直接匹配应用程序实际的数据模型。其次,关系数据模型不能满足应用程序的实际需要,比如应用程序还需要一些非功能性的需求,这些需求包括操作,数据拥有关系,性能和安全。

为了解决如上问题,ADO.NET引入了Entity Framework,它包含了数据模型以及一些设计时和运行时的服务。通过Entity Framework提供的更高抽象层,应用程序的数据模型就可以直接和数据库的关系数据模型交互。


Entity Data Model

Entity Data Model—简称EDM—是一个实体关系数据模型(Entity-Relationship data model). EDM的一个关键的概念如下:

Entity: Entity是实体类型的实例(例如:Employee, SalesOrder)。它由一个关键字来组织数据记录。多个Entity可以组成Entity-Sets.

RelationShip:RelationShip是关系类型的实例,它关联相关的实体.多个Relationships 可以组成 Relationship-Sets.

除了上面两个核心概念外,EDM模型还支持多种类型的扩展.

继承:实体类型可以继承于其他的类型.这种类型的继承只继承结构,不提供向面向对象语言的"行为"继承.

复合类型:定义一个复合类型Address,它可以由StreetAddress, City 和State这些属性复合而成.


我们按照EDM的概念重新定义[图1]:

             [图2]
这里描述了如下元素:
三个实体类型,分别是SalesPerson,SalesOrder和StoreSalesOrder。其中StoreSalesOrder继承自SalesOrder。
一个关系: SalesOrder 和 SalesPerson 之间的关系。
两个实体集(entity-sets):SalesOrders 和 SalesPeople。 实体集SalesOrders 拥有SalesOrder和StoreSalesOrder两个实体类型。

看看上面的模型视图已经更接近应用程序需求了。其中SalesPerson的信息已经不再分布在不同的数据表中了,同时也没有了主从键了。

比如以前这样的查询:

1SELECT sp.FirstName, sp.LastName, sp.HireDate
2FROM SalesPerson sp
3INNER JOIN Employee e ON sp.SalesPersonID = e.EmployeeID
4INNER JOIN Contact c ON e.EmployeeID = c.ContactID
5WHERE e.SalariedFlag = 1 AND e.HireDate >= '2006-01-01'
6

现在只需写成:

1SELECT sp.FirstName, sp.LastName, sp.HireDate
2FROM SalesPeople AS sp
3WHERE sp.HireDate >= '2006-01-01'



更多关于ADO.NET Entity Framework相关的介绍, 英文好的朋友可以参阅:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/ADONET_EDM.asp
以及
http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnvs05/html/ADONETEnFrmOvw.asp


ADO.NET Entity Framework与ADO.NET的区别

两者的区别: 1、采用EF进行开发只需要操作对象。使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想。ADO.NET以数据库为中心来开发数据访问层。 2、采用EF减少了数据处理工作,可以简...
  • wangzl1163
  • wangzl1163
  • 2017年06月07日 10:52
  • 1950

网站分页功能的实现(Entity Framework和ADO.NET两种综述)

项目中用到了分页,上次是用的是Entity Framework,这次用ADO.NET,都是老师讲的,有必要总结一下,加深下记忆。 一、Entity Framework中完成分页 老师就讲了一种,在...
  • luck901229
  • luck901229
  • 2012年06月05日 20:43
  • 3063

error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.

转自VC错误:http://www.vcerror.com/?p=1740 问题描述: error 0152: No Entity Framework provider found for the ...
  • swanabin
  • swanabin
  • 2015年07月18日 11:04
  • 3175

对ADO.Net Entity Framework的了解总结

因为数据持久层选型,这段时间查阅了很多资料,也做了很多实验,感觉这个东西虽然很强大,但在做大型项目时还是缺少灵活性,主要在以下几个方面: 1、实体缓存支持不够灵活,虽然支持缓存,但必须对ObjectC...
  • hawksoft
  • hawksoft
  • 2011年08月04日 22:39
  • 2397

EF TMD

TMD几个月前,本着学习的心态,首次在xiangmu
  • leftfist
  • leftfist
  • 2014年09月11日 11:38
  • 3439

Entity Framework 安装完毕后VS2010中看不到ADO.NET Entity Data Model模板

Entity Framework 安装完毕后VS2010中看不到ADO.NET Entity Data Model模板 .edmx  (2012-05-26 23:06:10) 转载▼ ...
  • yizhiduxiu11
  • yizhiduxiu11
  • 2012年08月23日 20:25
  • 1914

实体框架(Entity Framework)--简介

是什么?     微软官方解释:ADO.NETEntity Framework是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早起被称为ObjectSpace,...
  • u013047584
  • u013047584
  • 2015年11月22日 21:20
  • 1460

ADO.NET与ORM的比较(4):EntityFramework实现CRUD

 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都...
  • zhoufoxcn
  • zhoufoxcn
  • 2010年05月10日 08:57
  • 17799

使用Entity Framework访问MySQL数据库

简介 Entity Framework (EF,ADO.NET Entity Framework)是微软官方提供的.NET平台的ORM框架。相比于LINQ TO SQL,EF框架具有很明显的优势: ...
  • qq798833488
  • qq798833488
  • 2016年05月03日 10:52
  • 1795

ADO.NET Entity Framework 4.3 之 Code First 下自动更新数据库结构(Automatic Migrations)

介绍 ADO.NET Entity Framework 4.3 的新特性:Code First 下自动更新数据库结构(Automatic Migrations) 示例 Web.confi...
  • educast
  • educast
  • 2012年06月26日 11:43
  • 2465
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ADO.NET Entity Framework简介
举报原因:
原因补充:

(最多只允许输入30个字)