Entity Framework技术导游系列 开篇 (转)
在微软平台写程序有年头了,随着微软数据存取技术的持续演化,我在程序中先后使用过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相关的博客,很多都有价值。
Entity Framework技术导游系列 开篇 (转)的更多相关文章
- 【转】Entity Framework技术导游系列开篇与热身
转自:http://blog.csdn.net/bitfan/article/details/12779517 Entity Framework走马观花 之 把握全局 ================ ...
- [转]Entity Framework技术导游系列开篇与热身
学习Entity Framework技术期间查阅的优秀文章,出于以后方便查阅的缘故,转载至Blog,可查阅原文:http://blog.csdn.net/bitfan/article/details/ ...
- Entity Framework技术导游系列开篇与热身
在微软平台写程序有年头了,随着微软数据存取技术的持续演化,我在程序中先后使用过ODBC.DAO.ADO.ADO.NET.LINQ to SQL. Entity Framework这些技术. 近几年来, ...
- Entity Framework技术系列之0:开篇
小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/shareto ...
- 【转】Entity Framework技术系列之7:LINQ to Entities
前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据. L ...
- Entity Framework 6 开发系列 目录
2014 年开始接触 Entity Framework 6 也快两年,用它已经沉淀了一个成熟架构,也用来开发了不少大大小小的产品和项目,直到这段时间,才真正有时间来回顾,重新学习它,为让大家更加了解E ...
- Entity Framework 5.0系列之Code First数据库迁移
我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...
- 基于.NET的微软ORM框架视频教程(Entity Framework技术)
基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲 ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 ...
- Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/
Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/
随机推荐
- Netty系列之Netty百万级推送服务设计要点
1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...
- 解决Dropbox无法连接的问题
同步共享服务Dropbox从6月18日开始再次遭到封锁,原因是DNS污染.Dropbox上次在2010年5月曾遭到IP封锁和网址关键字过 滤,2012年5月除文件外链功能外其它功能可正常访问:2014 ...
- oracle and 和 or
源地址:https://zhidao.baidu.com/question/350891282.html (FirstName='Thomas' OR FirstName='William') AND ...
- logstash 配置 logstash-forwarder (前名称:lumberjack)
logstash-forwarder(曾名lumberjack)是一个用go语言写的日志发送端, 主要是为一些机器性能不足,有性能强迫症的患者准备的. 主要功能: 通过配置的信任关系,把被监控机器的日 ...
- Linux文件权限
Permission deny 权限 拒绝 查看权限 ls -a ls -la expression 查看文件夹里边东西的权限 用户群的分类 组群:一个操作系统可能几个人同时用 方便小组的文件 ...
- Mware vCenter Server 识别固态硬盘为(非SSD)是什么原因?
人工定义一下: 用root登录进ESXi控制台:esxcli storage nmp device list #列出储存清单esxcli storage nmp satp rule add -s VM ...
- Burp SuiteBurp Suite使用详解
http://www.2cto.com/Article/201209/153312.html Burp Suite是Web应用程序测试的最佳工具之一,其多种功能可以帮我们执行各种任务.请求的拦截和修改 ...
- 哈夫曼树---POJ3253
http://poj.org/problem?id=3253 这就是 最典型的哈夫曼树的题型,我们就根据这道题学习一下哈夫曼树 这是最开始我们把21据下来之后我们据下8,然后再据下5得到34,可以看出 ...
- Android狂记忆
虽然说技术人员偏爱实战,而不屑理论或记忆,但实战之前,若是记忆一些知识,开发起来将会如虎添翼,不说了,开始狂记吧! Android 系统包说明: android.app :提供高层的程序模型.提供基 ...
- go read text file into string array
http://stackoverflow.com/questions/5884154/golang-read-text-file-into-string-array-and-write 方法一 pac ...