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相关的博客,很多都有价值。

来源: <http://blog.csdn.net/bitfan/article/details/12779517>

来自为知笔记(Wiz)

时间: 2024-11-08 21:44:39

Entity Framework技术导游系列开篇与热身的相关文章

【转】Entity Framework技术导游系列开篇与热身

转自:http://blog.csdn.net/bitfan/article/details/12779517 Entity Framework走马观花 之 把握全局 ========================================= 这是一个系列文章 上一篇<Entity Framework技术导游系列开篇与热身 > ========================================= 在深入学习某项技术之前,应该努力形成对此技术的总体印象,并了解其基本原理,本

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

学习Entity Framework技术期间查阅的优秀文章,出于以后方便查阅的缘故,转载至Blog,可查阅原文:http://blog.csdn.net/bitfan/article/details/12779517 在微软平台写程序有年头了,随着微软数据存取技术的持续演化,我在程序中先后使用过ODBC.DAO.ADO.ADO.NET.LINQ to SQL. Entity Framework这些技术. 近几年来,Entity Framework(后文简称EF)的地位日益上升,成为微软数据存取技

Entity Framework技术系列之8:使用Entity Framework技术实现RBAC模型

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 前言 RBAC(Role-Based Access Control,基于角色的访问控制),是继DAC(Discretionary Access Control,自主访问控制)和MAC(Mandatory Access Control,强制访问控

Entity Framework技术系列之7:LINQ to Entities

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据.LINQ提Entity Framework技术系

【转】Entity Framework技术系列之7:LINQ to Entities

前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据. LINQ提Entity Framework技术系列之7:LINQ to Entities供了丰富的类似SQL的查询语法,功能强大且容易上手.下图汇总展示了LINQ技术的官方实现集合: 图1官方LINQ实现汇总图 正 如上图所示,LINQ to Entities 是LINQ技术在实体对象模型中的一种实现

Entity Framework 6 开发系列 目录

2014 年开始接触 Entity Framework 6 也快两年,用它已经沉淀了一个成熟架构,也用来开发了不少大大小小的产品和项目,直到这段时间,才真正有时间来回顾,重新学习它,为让大家更加了解Entity Framework 6,以及想把这两年中,开发过程中碰到的种种问题,跟大家分享,特此想做一个Entity Framework 6 开发系列的计划 第一篇:Entity Framework 简介 第二篇:Entity Framework CodeFirst & Model 映射 第三篇:E

基于.NET的微软ORM框架视频教程(Entity Framework技术)

基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲  ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 第五讲 LINQ TO Entities 第六讲 ObjectQuery查询(上) 第七讲 ObjectQuery查询(下) 第八讲 Entity中的增删改及事务处理 第九讲 Entity中的存储过程使用(完) 源代码及视频

Entity Framework 5.0系列之自动生成Code First代码

在前面的文章中我们提到Entity Framework的“Code First”模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power Tools如何基于现有数据库生成数据类和数据库上下等. Entity Framework Power Tools 基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entity Framework Power Tools(一个Code First反向工程工具).

Entity Framework 5.0系列之EF概览

概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种由ADO.NET驱动的ORM框架,使用Entity Framework开发人员可以不必考虑数据的基础数据表和列,在处理数据时能够以更高的抽象级别进行工作,并能够以相对传统开发编写更少的代码来创建和维护应用程序. 我们知道面向对象的编程与数据存储系统的交换提出了一个难题:类结构通常同关系数据表组织结构