ADO.NET数据存取技术与O/R Mapping演进[转]
2009年2月号的台湾微软MSDN Flash,祭司撰文一篇[ADO.NET资料存取技术与OR Mapping演进],说明ADO.NET技术之现况,以及未来LINQ to SQL vs. Entity Framework未来走向与发展。
祭司会写这篇的原因,是因为不少人对LINQ to SQL vs. Entity Framework之发展与未来性感到关切,或者说得更确切一点,是疑惑重重,到底微软将如何决定其O/R Mapping技术之未来方向;此外,由于早期ADO.NET之意义,主要是针对数据库进行联机存取之统称,但在数代的ADO.NET发展下,如今ADO.NET已不单纯限于纯粹的关连式数据库存取,举凡任何型式,任何数据建构与运作的技术,都有可能包纳在ADO.NET范畴之中,故在此先整理现有ADO.NET技术之成员,再论及LINQ to SQL vs. Entity Framework之未来走向与命运,以下是本期的文章。
综观现今诸多的程序语言,不论其型态为窗口、Web网页、Console、抑或向量RIA,亦不论其应用对象为企业、网站或行动装置,彼此理念与主张或许有异,但对于数据存取却是尔等一致的共通需求,也就是几乎任何语言都必须提供数据存取之技术,以满足应用程序数据处理之所需。
在.NET Framework框架平台下,负责资料存取的是ADO.NET区块,然而ADO.NET只是数据存取技术的一个概念性统称,其所包含之数据存取技术在历经数代版本的演进下,实质内涵已大幅扩充,每种数据存取技术亦有其特定用途或目的,可适用于特定类型数据之开发,例如以下为ADO.NET技术之成员:
1.传统ADO.NET程序(.NET 1.0)
ADO.NET基础核心程序乃是以DbConnection、DbCommand、DbDataAdapter等类别为代表,其衍生的类别有SqlConnection、SqlCommand、SqlDataAdapter等等,这些都是日常ADO.NET程序实际应用到的类别与对象,甚至还有大家所熟悉的DataSet、DataTable、DataView对象,第一代的ADO.NET程序便是以此为开展基础。
2.DataSet设计工具与TableAdapter(.NET 2.0)
DataSet设计工具为精灵化的数据设计工具,它是基于传统手工ADO.NET程序的一种改良辅助,因为传统ADO.NET程序在面对大量的数据字段时,程序代码往往过于冗长与庞杂,撰写稍有不慎便容易出错,是故在Visual Studio 2005首次提供强型别DataSet设计工具后,便可快速建立数据存取所需之DataSet与TableAdapter,自动产生与数据表相关的Select、Insert、Update、Delete命令,得以消除手工撰写冗长ADO.NET程序的必要性,达成数据程序之快速开发。
3.数据源控件(.NET 2.0)
在.NET 2.0架构的诸多新功能中,数据源控件是最受人注目的功能之一,它在数据开发上具备快速、方便、容易等特性,可以在极短时间内,以精灵完成复杂的数据系结程序,这就是最为人所称颂的免程序代码,普遍受到程序设计师之喜爱,也大量应用于现有.NET程序之中,而此类控件的是以SqlDataSource、AccessDataSource、ObjectDataSource、XmlDataSource、SiteMapDataSource为代表。
4.LINQ to SQL(.NET 3.5)
在数据库存取程序变容易后,.NET 3.5又思考另一个异类数据查询之议题,因为数据源的不同,以致查询集合、DataSet、关连式数据库与XML数据必须使用十分迥异之语法,如此对于程序之学习与维护势必十分沉重与不易,是故.NET 3.5推出了LINQ(Language-Integrate Query)查询语言,以统一的语法型式贯通所有类型数据之查询,并与C#及VB在语言层级进行整合,达到一个更完美的数据查询境界。
5.ADO.NET Entity Framework(.NET 3.5 SP1)
不过ADO.NET之进化并未因LINQ的推出就自此停顿,因为在面向对象程序及关连式数据库之间还有很大的一层隔阂,程序设计师仍需在这两个世界间协调周旋,并且数据存取程序与后端数据库之抽象化隔离层度仍然不足,程序高度相关之绑定,以致于ADO.NET不但牵一发而动全身,甚至也因此而受限于特定数据库平台,而不能随心所欲地游走于各种数据库平台。
而解决这个问题的一帖良方便是Entity Framework,一种以EDM(Entity Data Model)为基础的O/R Mapping技术,不但可以有效缩小面向对象及关连式数据库二者间的鸿沟,甚至在以EDM描述为核心的辅助下,可以有效抽离与数据库的强烈绑定,如此不但可以跨数据库平台,甚至可以跨越数据类型,例如EDM还可以描述BI、Portal、Reporting Services、Data Services等数据,让Entity Framework技术可以延伸至各种数据类型领域。
6.ADO.NET Data Services(.NET 3.5 SP1)
Data Services是以REST(Representational State Transfer)为型式的数据存取技术,透过URIs便能存取Http上之网络资源,而Data Services对于AJAX及Silverlight的数据存取程序特别具有吸引,在Data Services的协助下可有效完成异步数据之开发,让复杂的AJAX数据处理过程变得容易许多,这就是Data Services与众不同的功用与魅力。
7.ADO.NET Dynamic Data(.NET 3.5 SP1)
Dynamic Data可以建立以Data-Driven为导向的ASP.NET应用程序,最重要的是快速且容易,因Dynamic Data架构可提供完整的数据存取操作 (建立、更新、移除、显示)、关系型运算和数据验证诸多功能,故在以数据驱动的程序开发上会特别有用。
在看到如此多样性的ADO.NET数据存取技术后,也许您会有些咋舌,甚至心中也有疑惑,为什么需要那么多类的ADO.NET技术?新功能的出现是否表示要放弃与取代旧功能?未来ADO.NET技术走向会如何?面对这一连串的疑惑,我给您的解答是,ADO.NET之所以包含如此多样性技术,是因为面对不同的数据场景时,需要不同的功能与架构以为因应,绝对不是一成不变的技术一路用到底,必须因时因地,适时采用对的技术方能事半功倍,快速完成工作任务。
另外还有许多人关心新世代LINQ to SQL与Entity Framework之走向,对于二者间的抉择感到犹豫,思索如何投资与取舍才是正确的?针对这个问题,ADO.NET小组在其Blog中已清楚表明立场,由于LINQ to SQL是属于轻量级的O/R Mapping技术,Entity Framework则定位在重量级O/R Mapping解决方案,功能架构的考虑较为全面性。再者LINQ to SQL缺乏以EDM为基础的数据描述能力,使得它扩充性远不如Entity Framework,因此Entity Framework将来会持续的研发与更新,而LINQ to SQL则不会重复投入资源,所以可想而知,Entity Framework的未来是充满希望与远景,LINQ to SQL则已达成其阶段性任务,并将慢慢地融入到Entity Framework之中。
最后有人误将LINQ与LINQ to SQL划上等号,以为LINQ to SQL将来不持续发展新版本,便意谓着LINQ将死,事实上LINQ to SQL只是LINQ的一种应用,不能代表LINQ本体,且LINQ的语法亦被Entity Framework所采用,它称作LINQ to Entity,所以请诸位放心地投资LINQ与Entity Framework技术,因为此二者不但是现有.NET 3.5的重要成员,亦将是.NET Framework 4.0最耀眼的明星,翩然优雅起舞于ADO.NET 4.0美丽舞台上。
《圣殿祭司》一书作者 奚江华
注:
关于LINQ to SQL vs Entity Framework二者较为详细之说明,请参考<LINQ to SQL vs. Entity Framework未来性之比较与释疑>文章之说明。
原文地址http://blog.sina.com.tw/4907/article.php?pbgid=4907&entryid=581724 (需代理)