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

[转]Entity Framework技术导游系列开篇与热身的更多相关文章

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

    转自:http://blog.csdn.net/bitfan/article/details/12779517 Entity Framework走马观花 之 把握全局 ================ ...

  2. Entity Framework技术导游系列开篇与热身

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

  3. Entity Framework技术导游系列 开篇 (转)

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

  4. Entity Framework技术系列之0:开篇

    小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/shareto ...

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

    前言 LINQ(Language Integrated Query,语言集成查询)是一组用于C#和VB.NET语言的扩展,它允许编写C#或者VB.NET代码,以与查询数据库相同的方式操作内存数据. L ...

  6. Entity Framework 6 开发系列 目录

    2014 年开始接触 Entity Framework 6 也快两年,用它已经沉淀了一个成熟架构,也用来开发了不少大大小小的产品和项目,直到这段时间,才真正有时间来回顾,重新学习它,为让大家更加了解E ...

  7. Entity Framework 5.0系列之Code First数据库迁移

    我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...

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

    基于.NET的微软ORM框架视频教程(Entity Framework技术) 第一讲  ORM映射 第二讲 初识EntifyFramework框架 第三讲 LINQ表达式查询 第四讲 LINQ方法查询 ...

  9. Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/

    Entity Framework 技术参考:http://kb.cnblogs.com/zt/ef/

随机推荐

  1. PHP date函数参数详解

    PHP date函数参数详解 作者: 字体:[增加 减小] 类型:转载       time()在PHP中是得到一个数字,这个数字表示从1970-01-01到现在共走了多少秒,很奇怪吧 不过这样方便计 ...

  2. DCDC(4.5V to 23V -3.3V)

    这里的电感应该用体积10*12的

  3. 如何解决php 生成验证码图片不显示问题

    最近遇到一个问题,就是验证码在别人的电脑上可以显示,但是我自己的电脑上去不能.原因找了好久,哈哈,终于找到了!现在给大家分享一下: 程序: <?php $w = 80; //设置图片宽和高 $h ...

  4. PHP7革新与性能优化

    有幸参与2015年的PHP技术峰会(PHPCON),听了鸟哥(惠新宸)的关于PHP7的新特性和性能优化的分享,一切都令人感到激动.鸟哥是国内最权威的PHP专家,他的分享有很多非常有价值的东西,我通过整 ...

  5. dynamic-link library shared library of functions and resources

    https://msdn.microsoft.com/en-us/library/1ez7dh12.aspx A dynamic-link library (DLL) is an executable ...

  6. [troubleshoot][archlinux][X] plasma(KDE) 窗口滚动刷新冻结(约延迟10s)(已解决,root cause不明,无法再次复现)

    现象: konsole,setting等plasma的系统应用反应缓慢,在滚动条滚动时,尤为明显. 触发条件: 并不是十分明确的系统滚动升级(Syu)后,产生. 现象收集: 可疑的dmesg [ :: ...

  7. SQL server 2008数据库的备份与还原(转)

      一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Server Management Studio → 数据库:Dsi ...

  8. NRF51822之app_button使用

    我们现在开始使用app_button,为什么要使用这个来替代直接使用GPIOTE呢? 因为我们在手册中可以看到如果一直开启GPIOTE in模式的需要需要很大电流.所以我们需要使用RTC来“周期”的查 ...

  9. Android项目框架之图片加载框架的选择

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 从Android爆发以后,自定义的控件如EditTextWithDelete.ActionBar.P ...

  10. Ubuntu 设置Vim tab为四个空格

    使用root权限打开 /etc/vim/vimrc 添加下列配置 set tabstop= set softtabstop= set shiftwidth= set noexpandtab set n ...