代码改变世界

[转]Entity Framework技术导游系列开篇与热身

2014-12-27 16:49  假面Wilson  阅读(298)  评论(0编辑  收藏  举报

学习Entity Framework技术期间查阅的优秀文章,出于以后方便查阅的缘故,转载至Blog,可查阅原文:http://blog.csdn.net/bitfan/article/details/12779517

 

在微软平台写程序有年头了,随着微软数据存取技术的持续演化,我在程序中先后使用过ODBC、DAO、ADO、ADO.NET、LINQ to SQL、 Entity Framework这些技术。

近几年来,Entity Framework(后文简称EF)的地位日益上升,成为微软数据存取技术的主角,也是我个人在开发应用程序时首选的数据存取技术,同时我也在博客园等专业网站上看到业界许多项目也都使用了EF。我放在CSDN下载频道的几讲Entity Framework 5课件(http://download.csdn.net/detail/bitfan/5153110),目前也有近800人下载,数十人发表评论,可以推断有不少人正在或打算学习EF,于是就萌生了写一个专门针对EF的系列文章的想法,重点谈谈我对EF的认识。

         Entity Framework系列文章初步计划分为以下几个部分,依据内容多少,每部分可能会继续分解成几篇文章,并且会持续修改。

一  走马观花——了解EntityFramework

二  寻幽探胜——深入了解EntityFramework技术要点

三  学以致用——在实际开发中使用EntityFramework

我主要从使用者的角度向大家展示EF这一技术的魅力,但不打算深入地介绍相关的技术细节,因为那需要整本书的篇幅。本系列文章的主要目的是为大家绘制一幅EF技术导航图,点出其技术关键点,并结合我个人的使用经验,对在开发中很可能会遇到的问题给出一些技术解决方案和建议,期望这些从实践中总结出来的东西能对正在学习与使用EF技术的朋友有所帮助。

还必须指出:EF本身是开源的,但由于时间有限,我并没有花时间去通读整个EF的源代码(如果真要精通EF,通读其源码是必须的),只是针对我觉得特别有用的场景进行了测试,并结合自己对EF的理解进行了总结和分析,有可能有不对的地方,敬请指出以便更正。

金旭亮

2013-10-16

 

EntityFramework走马观花之

热身准备

1 Entity Framework是什么?

EF是一种ORM(Object-relational mapping)框架,它能把我们在编程时使用对象映射到底层的数据库结构。比如,你可以在数据库中建立一个Order表,让它与程序中的Order类建立映射关系,这样一来,程序中的每个Order对象都对应着Order表中的一条记录,ORM框架负责把从数据库传回的记录集转换为对象,也可以依据对象当前所处的具体状态生成相应的SQL命令发给数据库,完成数据的存取工作(常见的数据存取操作可简称为CRUD:Create、Read、Update、Delete)。

2 为什么使用Entity Framework?

EF本身相当复杂,学习并掌握它需要花费不少的时间,那么,为什么我们要花这个时间?

就我自己的亲身感受,我觉得使用EF的好处有以下几点:

(1)能较大地提升数据库应用的开发效率

基于微软平台开发的人,恐怕没有人没有用过ADO.NET。ADO.NET提供了一整套与底层数据库结构相当一致的对象模型,易于使用,运行效率也高,在EF之前,绝大多数应用都直接使用ADO.NET。

ADO.NET其实很不错了,那还有什么必要使用EF?

就我的看法,简而言之:EF给数据库应用系统开发带来了更高的效率,使用它能更容易地写出易维护、易扩展的系统,而且性能虽然比不上ADO.NET,但也足够好,能满足大多数开发场景的需求。

与ADO.NET不一样,EF的抽象层次较高:它把数据库映射为DbContext,把数据库中存取的数据直接映射为实体(Entity)对象,屏蔽了底层的数据库内部结构,无需直接使用下层数据存取引擎所提供的底层对象(比如ADO.NET所提供的DbConnection,DbCommands等)完成CRUD。

仔细回顾一下软件技术发展的历史就会发现——软件技术主要通过提高抽象层次来提升软件开发效率。EF较之ADO.NET,它正是走的这条路。

(2)与ADO.NET一样,EF在使用上也很灵活:

只要提供一个EF 的Data Provider,EF就能使用多种关系数据库,而不是仅仅地绑定到微软的SQL Server,比如我就使用过EF把数据存储到MySQL中。

(3)EF是开放的:

EF本身开源,可以访问:http://entityframework.codeplex.com/SourceControl/latest下载源码。出现任何问题,可以直接看源码去。源码之前,了无秘密。开放给EF带来了生机与活力。

ADO.NET与EF之间其实是“井水不犯河水”,ADO.NET的抽象层次较低,性能较高,但开发效率与应对变化的能力不如EF,这不是说用ADO.NET就不能开发出兼有高性能与易扩展的应用,而是说EF在这方面很强,直接基于ADO.NET实现EF现在己经实现的功能,需要费不少劲,而这些功能在开发中基本上绕不开它们,你不用现成的,就得自己实现,最终你会发现,自己写的比不上EF开发者写的。

另一个值得一提的技术是LINQ toSQL,客观地说,这也是一个优秀的技术,但命运确实不好,“既生瑜,何生亮”,它曾经与EF争宠,但现在己被打入冷宫。诸位请忘记它吧,LINQ to SQL能做的,EF都能做。EF能做的,LINQ to SQL有些则做不了。

3 学习EF技术的前提

是不是什么人都能掌握EF?

不是的,如果想真正地用好EF,不花一点功夫是不可能的,而一些知识与技术不具备,也是不行的。以下是我总结的“学习与掌握EF的前提条件”,如果不满足以下任何一点,先别急着一头钻进来,估计你会找不着北的。

(1)掌握ADO.NET和SQL Server数据库的基本使用方法

虽然使用EF开发基本不需要与底层数据库存取引擎和数据库打交道,但你还是必须要知道他们的基础知识。比如,如果你不知道怎样使用DbConnection对象连接数据库,不知道怎样使用DbCommand向数据库发送SQL命令,不会用SQL Server Management Studio,不会编写SQL命令,……,那么,你还是先把这些学会再说吧。

特别地,强烈建议掌握SQLProfiler的用法,在技术探索过程中,我们需要用它来观察EF发出的SQL命令,以便更深入地了解其特性。

这里简单地说一下如何安装SQLProfiler。默认情况下,免费版本的SQL Express是不带SQL Profiler这一工具的,但我们有一个取巧的方法:

首先安装SQL ServerExpress,完成之后,到微软网站下载SQL Server完整版的安装包,在安装时选择“向现有实例添加功能”,在安装选项时选中“管理工具——完整”,如下图所示:

 

 

哈,现在免费的Express版本也能使用SQL Profiler了。

(2)掌握LINQ、Lambda表达式、与数据集合查询相关的扩展方法

EF支持LINQ to Entities编写的查询,我们也可以直接使用诸如FirstOrDefault()、Skip()之类针对IEnumerable/IQueryable集合对象的扩展方法完成数据查询工作,在开发中编写Lambda表达式实在是家常便饭,从其它语言转过来的朋友请先熟悉它。

(3)OOP编程基本技能与ORM的基础知识。

以下几个问题可用于自我测试:

  • 对象间主要有三种关联类型:一对一,一对多,多对多,如何用C#编程实现?
  • 如果要把拥有上述三种关联类型的对象保存到数据库中,这些对象间的关联应该如何映射到数据库表上?
  • 特别地,如果对象之间存在着继承关系,又该如何处理?
  • ……

掌握这部分内容非常重要,实际开发中出现的问题很多是与它相关的,自己去找书看吧。

(4)安装Visual Studio,访问官方网站

在Visual Studio中使用EF很简单,首先创建一个项目,然后使用NuGet搜索Entity Framework:

 

在计算机不能联网的情况下,则可以向项目中添加一个ADO.NET Entity Data Model(下图),完成向导之后,所有相关的项目引用就都设置好了:

 

 

 本人强力推荐使用NuGet方式。

另外,推荐安装EntityFramework Power Tools(http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d),如果使用Code First方式(后面介绍)开发数据库应用,使用这个工具能分析现有代码并生成可视的模型视图(只读),也能从现有数据库中生成所有数据实体,特别有趣地,它还可以直接为数据模型生成预编译视图减少程序装载时间,功能强大。

Entity FrameworkPower Tools目前最新版本是BETA 4,还不成熟,存在着一些功能缺陷,比如现有版本不能只选择数据库中选择部分表生成数据实体类,这一工具真正达到成熟、稳定和实用还有较长的路。

最后介绍一下EF相关的学习资料:

首先是正式出版的技术书籍,在EF这块,最有名的是Julie Lerman(她是女性)写的三本技术书籍,她还在pluralsight网站录制了不少视频。

EF在MSDN上的官方网站是:

http://msdn.microsoft.com/zh-cn/data/ee712907

此网站上有对EF各个技术点的详细介绍。

另一个大本营则在ASP.NET上,其网址为:http://www.asp.net/entity-framework,提供了不错的教程。

在Channel 9(http://channel9.msdn.com)上可以看一些与EF有关的技术视频,其中有对EF最新版本6的介绍。

最后,stackoverflow网站(http://stackoverflow.com/)是解决实际开发中遇到问题的最佳地点,上面有大量与Entity Framework相关的问答,极具价值。

上述介绍的都是英文技术资源,E文不好的可以看看博客园(http://www.cnblogs.com/),上面有不少国内技术高人写的与EF相关的博客,很多都有价值。