[ASP.NET
MVC 小牛之路]06 – 使用 Entity Framework
在家闲着也是闲着,继续写我的[ASP.NET MVC 小牛之路]系列吧。在该系列的上一篇博文中,在显示书本信息列表的时候,我们是在程序代码中手工造的数据。本文将演示如何在ASP.NET MVC中使用Entity
Framework从数据库中获取数据。虽然本文题目听上去比较简单,但如果你认真阅读,相信你一定会有所收获。
本文目录:
ORM 和 EF
当我们要开发一个应用程序,就要考虑怎样展示数据,怎样持久化数据。考虑这个问题时我们所要关心的东西,最重要的莫过于程序的性能、开发的简易性和代码的可维护、可扩展性。
持久化(Persistence),是指在应用程序中能永久地保存各个处理状态信息的机制。如果没有持久化这个机制,状态只能保存在内存中,机器关机后就会丢失。
在应用程序中,当要永久地保存数据时,我们会选择关系数据库(Relation DataBase);当要临时地保存数据时,我们则使用存储在内存中的对象。目前对于大多数开发人员来说,都是用关系数据库技术来作为持久化机制。虽然现在有些人正在尝试使用对象数据库(Object DataBase)技术,但关系数据库技术在许多年以内依然会是最主要的持久化机制。
为什么会出现对象数据库? SQL语言是一种非过程化的面向集合的解释型语言,而很多高级语言是过程化的面向对象的编译型语言,这使得两种语言之间存在着不匹配,导致效率不如人意。这种不匹配被称为“阻抗失配”,对象数据库的出现就是为了解决“阻抗失配”。
我们知道,在关系数据库技术中是用Table以行和列的结构来存放和组织数据的。在.NET 2.0以前,C#还没有泛型的时候,人们基本上用填充在DataSet中的DataTable来映射并存放从关系数据库中查询出来的数据,正如下面代码所示:
using (SqlConnection conn = new SqlConnection(connString)) { using (SqlDataAdapter da = new SqlDataAdapter("Select * from order", conn)) { DataTable dt = new DataTable(); da.Fill(dt); ... }}
这种方式虽然能让面向对象语言匹配关系数据库,但它有一些明显的缺点,如非类型安全、难操控、低性能等。从.NET 2.0开始,人们开始通过泛型技术用实体模型对象的集合来匹配关系数据库中的数据,这种方式解决了DataTable方式所面临的缺点,且它有强类型、在VS中自动完成、编译时检查等特点,厂受.Net开发人员的喜爱。
为了让开发人员不用手动去做这种“匹配”工作,人们研发了很多ORM工具(如Entity Framework、NHibernate等)。ORM(Object Relation Mapping)工具,顾名思义,它的角色就是为了解决“关系”和“面向对象”之间的“失配”,它可以使得开发人员不用过多关心持久层而可以花更多的时间专注于业务。
Entity Framework(EF)是微软以ADO.NET为基础所发展出来的ORM解决方案,以Entity Data Model(EDM) 为主。EF利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序中的类对象(Entity),而数据字段都转换为属性 (Property),关系则转换为结合属性 (Association),让数据库的 E/R
模型完全的转成对象模型,如此让开发人员就能用熟悉的面向对象编程语言来调用访问。EF 4.0 本文来源gaodai#ma#com搞@@代~&码网以后支持Database First、Model First、Code First三种生成模式,Code First模式用的人比较多。
概念和理论性的东西就不多讲了,我也是带着疑问去查找网络资源根据自己的理解半摘半归纳出来的,而且鄙人不才,很多东西想描述但都不知道怎么组织语言。
本文目的主要是让读者对EF有个感性的认识,然后了解EF在ASP.NET MVC中的应用,不会去研究原理性的东西,下次有空再单独介绍EF吧。
使用Entity Framework