第一章 ADO.NET实体框架简介数据库
在微软2009年11月份的专业开发者大会上,那位传说中的微软卓越工程师Don Box(丹•博克斯)曾说过,“若是你是名.net开发人员,那么实体框架就是你的目的地。咱们来了。赶忙上船吧,×××。”编程
不错,时候到了。后端
开发人员耗费了大量宝贵时间考虑他们的后端数据库、表以及他们的关系、存储过程的名字和参数、视图以及他们返回的数据的模式定义。对.net开发人员来讲,微软全新的实体框架改变了这种游戏规则,你书写程序时没必要再关系数据存储的细节。你能够把精力所有放在程序书写的任务上而不是数据的访问。app
ADO.NET实体框架已经进而转变成为构建.net应用程序的核心数据访问平台。微软在TeachEd 2006大会上宣布了实体框架,时隔2年以后,它做为Visual Studio 2008 sp1和.NET 3.5 sp1的部分一同发布.做为版本1的产品,实体框架一开始获得的是质疑,远没有大范围被采用。然而,随着2010年4月的Visual Studio 2010和.NET 4的发布,大大改进的实体框架最终赢得了关注,在广大开发人员和.NET团队中引发极大的反响,这帮家伙迅速跳上了甲板。框架
尽管ADO.NET保留着已有的数据访问技术,然而微软的核心数据访问技术朝着实体框架发展的战略部署将会从商业平台开发部门(拥有着微软的所有数据编程任务)吸入大量的创新和资源。对微软来讲这是门很重要的技术,因此你不该当忽视。实体框架也正慢慢地被集成到了微软的众多产品中,不管是该产品使用了实体框架来支持本身的特性好比Commerce Server 2009里的多通道贸易基础,仍是该产品支持与实体框架的交互好比说SQL Server建模。ide
然而咱们为何要一个全新的数据访问技术?在迫使了开发人员从一种数据访问技术切换到另外一种的技术(从DAO到RDO,再到ADO,以及到ADO.NET的转变)以后,到了ADO.NET微软貌似已经固定下来一个开发人员能够投入的工具了。伴随每一次的Visual Studio和.NET框架的发布,ADO.NET都已经加强了而且加入了新特性,但却一直保持向后兼容性。咱们的投入一直很保险。工具
尽管如此,但它终将停滞。实体框架是ADO.NET的另外一个加强,给了开发人员除DataReaqders和DataSet之外新的访问数据和操纵结果的机制。spa
可是微软已经作了DataSet所力所能及的事情。下一步就应该使开发人员关注于领域模型而由.NET自动帮你作那些苦逼的数据库交互工做。.net
在本章你将会接触到实体框架的关键部分:实体数据模型、实体类、核心.NET API以及Visual Studio设计工具。再者,你也能了解实体框架是如何与ADO.NET的DataSet和LINQ to SQL配合工做的。最后,你还能获知不少的Visual Studio 2010和.NET 4中实体框架的改动和增长的部分,以及版本1中的那么多的痛点是如何消除的。设计
实体关系模型:针对模型编程而不是数据库
实体框架一个主要的好处就是你没必要再关注数据库的结构细节了。全部的数据访问与存储都是针对的概念模型,它反映的是你的业务对象。
在使用ADO.NET的DataReader和不少其它的数据访问技术时,你要花费大量时间用来写代码从数据库里获取数据、读取结果集并拾取你想要的数据,并把它们放入你的业务类。使用了实体框架,你再也不是查询数据模式而是反映你业务模型的模式。当检索数据时,你没必要被迫合理组织行与列并把它们放到对象里,由于它们返回的就是对象。当要把所作修改存回数据库时,你只须要保存这些对象就能够。实体框架作必要的工做把你的对象再转换成相关存储的行与列。实体框架所作的这些工做,正和对象关系映射(ORM)工具工做方式很类似。实体框架使用一个被称做实体数据模型(EDM)的模型,它是由实体关系建模(ERM)演化而来,ERM概念在数据库开发领域使用了不少年。
--------------------------------------------------------------------------
实体数据模型的根源
微软的实体框架从实体关系建模(ERM)方法演变而来,ERM已经在白板上画了有30多年了(?没大明白)。ERM定义了实体的模式以及彼此的关联。实体不一样于对象,它们定义的是对象的模式而不是行为。因此说,实体有的相似于你数据库里的表模式,不一样的是它描述的是业务对象的模式。开发人员绘制那么多年的ERM无非为了可以搞清如何把数据库结构化的表数据转换成程序所使用的业务对象。
提及ERM不得不提一提陈品山博士(Dr. Peter Chen),他在1976年发表的论文《The Entity-Relationship Model--Toward a Unified View of Data》被认为是第一个有关ERM的权威性著做。(http://csc.lsu.edu/news/erd.pdf)
拥有众多数据库专家的队伍的Mircosoft Research开始设计一种方法但愿可以自动在概念模型与数据库模式之间架起一座桥梁。须要是一个双向通道让开发人员既可以从数据库检索数据、填充实体又能够把修改存回数据库。
2006年6月,Microsoft Research发表它的第一篇关于EDM的论文,做为对ERM的回应。这篇论文的做者包括数据库奇才Jim Gary,然而不幸的是他2007年在旧金山外海失踪。
--------------------------------------------------------------------------
实体数据模型:客户端的数据模型
实体数据模型(EDM)是一个客户端的数据模型,它是实体框架的核心。数据库模型隶属于数据库,这点EDM与之不一样。程序中的数据模型描述的是你业务对象的结构。就比如是给了你重构企业数据库表和视图的权限,使得这些表与关系看上去更像你的业务领域而不是数据库管理人员设计的规范模式。
图1-1 规范化的数据库表模式
图1-1显示了在一个数据库中的一个典型的表集的模式。数据库管理员出于规模考虑选择了把Person放入一个单独的表中,而由PersonDetails提供了一个Person的额外信息。SalesPerson表用来提供销售人员的额外信息。
为了能访问Person记录的这些额外数据,程序里须要用到全内链接与外链接进行查询。不然就得访问一系列的预约义的存储过程与视图,每一个可能须要不一样的参数,而且返回值还得采用不一样方式构造。
为了检索一个SalesPerson记录集以及他们各自的详细信息的T-SQL查询语句可能有点相似这样:
设想有某个程序可能但愿数据库看起来和它本身的一个视图那样。图1-2重构了该模式.
图1-2 为了匹配你的业务对象改造后的Person数据