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 (需代理)