第3章数据模型2ppt课件.ppt

上传人:春哥&#****71; 文档编号:15608409 上传时间:2022-05-13 格式:PPT 页数:44 大小:2.83MB
返回 下载 相关 举报
第3章数据模型2ppt课件.ppt_第1页
第1页 / 共44页
第3章数据模型2ppt课件.ppt_第2页
第2页 / 共44页
点击查看更多>>
资源描述

《第3章数据模型2ppt课件.ppt》由会员分享,可在线阅读,更多相关《第3章数据模型2ppt课件.ppt(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、在此输入您的封面副标题第3章数据模型2ASP.NET MVC 程序设计开发教程第2章 初识 ASP.NET MVC 项目开发学习目标重点难点数据模型 基于 Entity Framework 的数据模型 库模式数据模型 了解数据模型的基础知识熟悉基于 LINQ to SQL 的数据模型 理解基于 Entity Framework 的数据模型 了解自定义数据模型 掌握基于 Entity Framework 的数据模型的创建 掌握基于 Entity Framework 的数据模型的数据查询、更新、添加与删除 数据模型 在开发基于 ASP.NET MVC 网站的过程中,Model(数据模型)通常是整个

2、项目中首先要 开发的部分,所有需要进行数据访问的操作都需要通过调用数据模型完成。数据模型负责通 过数据库、Web Service、活动目录或其他方式获得数据,或者将用户输入的数据通过上述方 式保存。本章通过一个简化版的在线书店项目讲解数据模型的创建和使用。数据模型 为实现在线书店项目,下面创建一个名为 MvcBookStore 的数据库,该数据库包含 Books 和 Orders 两个数据表,分别存放书籍数据和订单数据。为了便于讲解,假设一个订单只包含 一本书,暂且让订单与书籍为多对一的关系,但要注意,在实际的项目开发中订单与书籍应 该是多对多的关系。 Books 数据表相关字段和说明如表 3

3、-1 所示。 3.1 数据模型概述 在 ASP.NET MVC 中,Model(数据模型)负责所有与数据有关的操作,不论是 Controller (控制器)还是 View(视图),都会在运行时调用数据模型,或是使用数据模型中定义的一 些数据操作方法,如数据的增删改查。 数据模型部分的代码,一般只能与数据和业务逻辑有关,不负责处理所有与数据无关的 操作或是控制视图的显示,而是应该只专注于如何有效地提供数据访问机制、业务逻辑和数 据格式验证等。 采用 ASP.NET MVC 框架时,虽然在 Model 层的开发技术繁多,但若要充分发挥 ASP.NET MVC 快速开发的优势,还是建议在 Model

4、 层采用 ORM(Object Relational Mapping,对象关系 映射)技术(如 LINQ to SQL、Entity Framework 等)来开发,用于实现面向对象程序语言中, 不同类别系统之间的数据转换。 3.1.1 基于 LINQ to SQL 的数据模型3.1.1 基于 LINQ to SQL 的数据模型3.1.1 基于 LINQ to SQL 的数据模型 (5)Visual Studio 2012 会根据数据库自动创建对应的实体对象,如图 3-5 所示。 3.1.1 基于 LINQ to SQL 的数据模型 至此,基于 LINQ to SQL 的数据模型已经创建完成。

5、在创建完成后自动生成的类文件中, 包含了许多由 Visual Studio 2012 自动生成的类,这些类就是与数据库表格对应的类。 创建好基于 LINQ to SQL 的数据模型后即可在项目中通过 LINQ 语法快速访问数据库。例 如,通过如下代码即可查询数据库中是否存在名为“ASP.NET MVC 程序设计”的书籍。 从上述代码不难看出,基于 LINQ to SQL 的数据模型可以由 Visual Studio 2012 快速创建 并让开发人员可以在项目中用一种类似于 SQL 语法的方式查询数据库,极大地提高了开发效 率。由于 LINQ to SQL 并不是本书的重点内容,所以这里仅做简单

6、介绍,如果需要深入研究 LINQ to SQL可以参考微软官方站点或其他参考资料。 using (Models.DataClasses1DataContext db = new Models.DataClasses1Data Context() var book = from b in db.Books where b.Title = ASP.NET MVC 程序开发 select b; 3.1.2 基于 Entity Framework 的数据模型 Entity Framework框架是微软的ADO.NET团队开发的另一个新颖的对象/关系映射(ORM) 框架产品。该框架使得开发人员可以像使用

7、普通对象一样来操作关系数据,而不用写很多数 据库访问代码。使用 Entity Framework 框架创建数据模型可以降低数据模型部分所需的代码 量并减少维护工作量。 与 LINQ to SQL 相比,Entity Framework 的关键不同之处是可以灵活地访问数据源,并且 可以将数据结构映射到自定义的实体类。LINQ to SQL 是一种支持拖放的解决方案,Entity Framework则能够将自行创建的实体关系映射到数据库对象。 3.1.2 基于 Entity Framework 的数据模型 从图 3-6 中不难看出,Entity Framework 框架在底层是通过调用 ADO.N

8、ET 来实现数据库 操作的,所以使用 Entity Framework 框架与直接使用 ADO.NET 访问数据库并不冲突。 使用基于 Entity Framework 的数据模型有如下好处: Entity Framework 框架提供了核心的数据访问功能,因此开发人员可以专注于应用逻 辑,提高开发效率。 z 开发人员可以面向数据模型对象编程,包括类型继承和创建复杂类型等,在最新版的 Entity Framework 框架中还支持 POCO(Plain Old CLR Objects,这种对象就像文本文件 一样,是一种最简单、最原始、不带任何格式的对象)数据对象。 通过支持独立于物理/存储模型

9、的概念模型,通过 Entity Framework 框架的使用可以让 应用程序不再依赖于特定数据引擎或者存储模式。 使用 Entity Framework 框架,可以在不改变应用程序代码的情况下改变数据模型和数 据库间的映射。 z 基于 Entity Framework 框架的数据模型也支持 LINQ 语法进行数据操作。 关于基于 Entity Framework 框架的数据模型的创建和使用,将在本章后面做详细介绍。 3.1.3 自定义数据模型 除了使用各类开发框架创建数据模型之外,也可以选择自定义数据模型。创建自定义数 据模型就像创建一个 C#类一样,比如根据前面提到的 Books 数据表创

10、建自定义数据模型,代 码如下:public class BookModel public int BookId get; set; public string AuthorName get; set; public string Title get; set; public decimal price get; set; public string BookCoverUrl get; set; 既然 LINQ to SQL 和 Entity Framework 框架都可以自动创建数据模型,那自定义创建数据 模型还有什么必要呢?主要原因在于 Visual Studio 中自动创建的基于 LINQ

11、 to SQL 或 Entity Framework 的数据模型并不一定完全符合数据显示或输入/输出的要求,这时就需要通过创建 自定义数据模型来辅助项目开发。 3.1.4 数据库开发模式 Entity Framework 支持 Database First(数据库优先)、Model First(模型优先)和 Code First(程序代码优先)三种开发模式,各模式的开发流程大相径庭, 开发体验完全不一样。三种开发模式各有优缺点,对于程序员没有哪种模式最好,只有哪种 模式更适合。 1Database First Database First(数据库优先)开发模式是指以数据库设计为基础,并根据数据

12、库自动生 成实体数据模型,从而驱动整个开发流程。该模式的好处在于使用简单,容易入手。 2Model First Model First(模型优先)开发模式是指从建立实体数据模型入手,并依据模型生成数据 库,从而驱动整个开发流程。该模式也就是业界流行的面向领域的编程模式,它的优点在于, 程序员可以使用与设计建模相同的思维来编写代码,更符合面向对象的思想。Model First与 Database First是互逆的,但最终都是输出数据库和实体数据模型。 3Code First Code First(程序代码优先)是基于 Entity Framework 的一种新的开发模式,程序开发人 员完全通过

13、手动编码,就可以使用技术来实现数据访问。即程序开发人员依据需求,撰写数 据上下文类(程序代码),而这些类与属性通过 ORM 框架的管理,转换成实体模型(Entity Mode),程序开始运行后,通过 ORM 框架,依据这些类创建数据库、表格、字段及其他数 据结构。该模式的优点在于,支持 POCO(Plain Old CLR Objects,简单传统 CLR 对象),代 码整洁,程序开发人员对代码的控制也更加灵活自如。 3.2 ASP.NET MVC 项目数据模型的选择与使用 在 ASP.NET MVC 项目中,数据模型基本上都是以 ORM(Object-Relation Mapping,对象

14、-关系映射)方式建立的。ORM 是将关系数据库中的业务数据用对象的形式表现出来,并通 过面向对象的方式将这些对象组织起来,实现系统业务逻辑的过程。 在 ORM 被提出之前人们一般通过 ADO.NET 访问数据库。或者更进一步,学过三层架构 的开发人员,知道可以将通过 ADO.NET 对数据库的操作提取到一个单独的类 SqlHelper 中, 然后在 DAL(Data Access Layer)层调用 SqlHelper 类的方法实现对数据库的操作。不过,即使这样做了,在数据访问层(DAL),还是要编写大量的代码,而用户一般对数据库的访问 无非增加、删除、修改、查询四种操作,故在数据库操作上肯定

15、存在大量的重复性工作,那 么有没有一种方式能自动生成这些语句呢?这样的话,用户就可以把精力或者更多时间投入 到特殊业务的处理上。ORM概念就是为了解决上述问题而提出的。 在使用ORM之前,我们编写的程序和数据库之间的耦合很紧密,如果操作的是SQL Server 数据库,就需要引入对应的类库(SqlConnection),对应不同的数据库需要完全不同的数据 访问层的代码。引入 ORM 后 ORM 在项目中的作用如图 3-8 和图 3-9 所示 3.2 ASP.NET MVC 项目数据模型的选择与使用 通过图 3-8 可以看出,O(Object)对应程序中的类 Books,就是对象;R(Relat

16、ion)对 应数据库当中的数据表;M(Mapping)表示程序中对象和数据库中关系表的映射关系,M通 常使用 XML 文件来描述。3.2 ASP.NET MVC 项目数据模型的选择与使用 通过图 3-8 可以看出,O(Object)对应程序中的类 Books,就是对象;R(Relation)对 应数据库当中的数据表;M(Mapping)表示程序中对象和数据库中关系表的映射关系,M通 常使用 XML 文件来描述。3.2 ASP.NET MVC 项目数据模型的选择与使用 通过图 3-9 可以看出业务实体,在数据库中表现为关系数据,而在内存中表现为对象。 应用程序处理对象很容易,但是很难处理关系数据

17、。ORM主要实现了关系数据和对象数据之 间的映射,通过映射关系自动产生 SQL 语句,在业务逻辑层和数据层之间充当桥梁。 ORM不是产品,是能实现面向对象的程序设计语言到关系数据库映射框架的总称。这类 框架可以使程序员既能利用面向对象语言的简单易用性,又能利用关系数据库的技术优势来 实现应用程序的增删改查操作。 目前,在.NET 平台下常见的 ORM 框架有 LINQ to SQL、Entity Framework、NHibernate 和 iBatis.NET。其中 Entity Framework 是微软最新推出的 ORM 框架,也是目前.NET 平台下的主 流 ORM 框架,本节后面将重

18、点介绍基于 Entity Framework 的数据模型的创建与使用。3.2.1 创建基于 Entity Framework 的数据模型 在 Visual Studio 2012 中创建基于 Entity Framework 的数据模型非常方便。首先,创建一 个 ASP.NET MVC 项目,并且建立好数据库(这里同样按照表 3-1 和表 3-2 建立数据库)。 然后可以按照如下步骤建立基于 Entity Framework 的数据模型。 (1)在“解决方案资源管理器”窗口中选择“Models”目录并右击,在弹出的快捷菜单 中选择“添加”“新建项”命令,如图 3-10 所示。 3.2.1 创建

19、基于 Entity Framework 的数据模型 (2)在“添加新项”对话框的“已安装的模板”列表中选择“数据”类别,然后在项目 模板列表中选择“ADO.NET 实体数据模型 ”并保留默认名称,如图 3-11 所示,单击“确定” 按钮。 3.2.1 创建基于 Entity Framework 的数据模型 (3)在“实体数据模型向导”窗口中选择“从数据库产生”选项并单击“下一步”按钮, 如图 3-12 所示。 3.2.1 创建基于 Entity Framework 的数据模型 (4) 如图 3-13 所示,新建一个指向目标数据库的连接,在最下方的文本框中输入要保 存在 Web.config 文

20、件中的 Entity Framework 连接字符串的名称并单击“下一步”按钮。 3.2.1 创建基于 Entity Framework 的数据模型 (5)如图 3-14 所示,设置数据库中要包含哪些数据表、视图或存储过程,以及是否要将其加入 Entity Framework 实体数据模型中,最后单击“完成”按钮。 3.2.1 创建基于 Entity Framework 的数据模型 完成上述操作后,Visual Studio 2012 就会自动创建好 Entity Framework 基础数据模型,这 个数据模型可以被应用到整个项目中,如图 3-15 所示。 3.2.2 基于 Entity F

21、ramework 数据模型的数据查询 为了方便学习 Entity Framework 数据模型的使用,下面先创建一个控制台应用程序项目, 然后按照前面介绍过的步骤在项目中创建好基于 Entity Framework 的数据模型。 Entity Framework 数据模型的查询通常可以使用 LINQ 语法实现,LINQ 语法(即 LINQ to Entities)使开发人员能够通过使用 LINQ 表达式和 LINQ 标准查询运算符,直接从开发环境中针对实体框架对象上下文创建灵活的强类型查询。具体查询步骤如下: 首先,在使用 Entity Framework 数据模型前,一定要创建 Entity

22、 Framework 数据模型上下 文对象的实例,如果是按照默认步骤创建 Entity Framework 数据模型的话,其上下文对象的 名称会以 Entities 结尾,创建其实例的具体代码如下: 3.2.2 基于 Entity Framework 数据模型的数据查询 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 class Program static void Main(string args) /实例化

23、查询上下文 using (BookStoreEntities db = new BookStoreEntities() /此处放置查询代码 3.2.2 基于 Entity Framework 数据模型的数据查询 1投影查询 【例 3-1】查询全部书籍。具体代码如下: (1)基于表达式的查询 /基于表达式的查询 var Books1 = from b in db.Books select b; /输出查询结果数量 Console.WriteLine(Books1.Count(); 3.2.2 基于 Entity Framework 数据模型的数据查询 (2)基于函数的查询 投影查询除了可以用上述

24、基于表达式的方式实现之外,还可以用一种更简洁的函数方式 实现,代码如下: /基于函数的查询 var Books2 = db.Books; /输出查询结果数量 Console.WriteLine(Books2.Count(); 从上述代码不难看出,LINQ 语法可以让用户在.NET 项目中使用一种类似于 SQL 的语法 实现数据查询。 3.2.2 基于 Entity Framework 数据模型的数据查询 2条件查询 【例 3-2】查询书名为“ASP.NET MVC程序开发”书籍的编号。具体代码如下: (1)基于表达式的查询 /基于表达式的查询 var Books1 = from b in db

25、.Books where b.Title = ASP.NET MVC 程序开发 select b; /输出查询结果的编号 foreach(var book in Books1) Console.WriteLine(book.BookId); 3.2.2 基于 Entity Framework 数据模型的数据查询 (2)基于函数的查询 /以函数方式实现 var Books2 = db.Books.Where(b = b.Title = ASP.NET MVC 程序开发); /输出查询结果的编号 foreach(var book in Books2) Console.WriteLine(book.

26、BookId); 3.2.2 基于 Entity Framework 数据模型的数据查询 (2)基于函数的查询 /以函数方式实现 var Books2 = db.Books.Where(b = b.Title = ASP.NET MVC 程序开发); /输出查询结果的编号 foreach(var book in Books2) Console.WriteLine(book.BookId); 3.2.2 基于 Entity Framework 数据模型的数据查询 3排序和分页查询 【例 3-3】查询全部订单,并按数量排序并分页。具体代码如下: (1)基于表达式的查询 /按数量排序并分页输出订单编

27、号 var Order1 = (from o in db.Orders orderby o.Num select o).Skip(0).Take(10); /输出查询结果的编号 foreach (var order in Order1) Console.WriteLine(order.OrderId); 3.2.2 基于 Entity Framework 数据模型的数据查询 (2)基于函数的查询 /以函数方式实现查询 var Order2 = db.Orders.OrderBy(o = o.Num).Skip(0).Take(10); /输出查询结果的编号 foreach(var order

28、in Order2) Console.WriteLine(order.OrderId); 在上述代码中分页主要依靠 Skip()和 Take()两个方法来实现,Skip()方法设置忽略查询结 果前多少项,Take()方法设置获取多少个连续的查询结果。值得注意的是,只有对查询结果 进行排序之后才能分页。 3.2.2 基于 Entity Framework 数据模型的数据查询 4聚合查询 【例 3-4】查询书籍总数和最高书籍价格。具体代码如下: /书籍总数 var num = db.Books.Count(); Console.WriteLine(num); /最大书籍价格 var price =

29、 db.Books.Max(b = b.Price); Console.WriteLine(price); 聚合查询只能通过函数式代码实现。3.2.2 基于 Entity Framework 数据模型的数据查询 5连接查询 【例 3-5】查询所有订购了ASP.NET MVC 程序开发的订单编号。具体代码如下: /所有订购了ASP.NET MVC 程序开发的订单编号 var Order3 = from o in db.Orders join b in db.Books on o.BookId equals b.BookId where b.Title =ASP.NET MVC 程序开发 sele

30、ct o; foreach(var order in Order3) Console.WriteLine(order.OrderId); 在上述代码中,join 关键字用于连接两个数据表,on 和 equals 关键字用于指定两个表是 通过哪个字段连接在一起的3.2.3 基于 Entity Framework 数据模型的数据更新 在 Entity Framework 中数据的更新是通过调用实体对象的 SaveChanges()方法实现的。调 用 SaveChanges()方法后,Entity Framework 框架会检查被上下文环境管理的实体对象的属性是 否被修改过,然后,自动创建对应的 S

31、QL 命令发给数据库执行。也就是说在 Entity Framework 数据模型中,数据更新需要通过找到被更新对象、更新对象数据和保存更改这三步来完成。 例如,基于上一节的例子,如果需要修改一本现有书籍的价格和名称,可以按照如下步 骤来实现。 (1)在使用Entity Framework数据模型做任何操作之前,首先都要确保正确地创建了Entity Framework数据模型上下文对象的实例,代码如下: /实例化查询上下文 using (BookStoreEntities db = new BookStoreEntities() /此处放置数据更新部分代码 3.2.3 基于 Entity Fra

32、mework 数据模型的数据更新 (2)找到需要修改价格和名称的数据实体对象,代码如下: var book = db.Books.FirstOrDefault(b = b.Title = C#程序设计 ); 上述代码使用了 FirstOrDefault()方法,该方法在没有查到符合条件的结果时返回空值, 在查到符合条件的结果时返回第一条结果对应的实体对象。 (3)更新实体对象并将修改保存到数据库,具体代码如下:/如果查询到了实体对象 if(book != null) /更新属性值 book.Title = JavaScript语言与Ajax应用; book.Price = 30; /保存更改

33、db.SaveChanges(); 只有在调用 SaveChanges()方法后,更新后的数据才能被写入数据库。 3.2.3 基于 Entity Framework 数据模型的数据更新 (2)找到需要修改价格和名称的数据实体对象,代码如下: var book = db.Books.FirstOrDefault(b = b.Title = C#程序设计 ); 上述代码使用了 FirstOrDefault()方法,该方法在没有查到符合条件的结果时返回空值, 在查到符合条件的结果时返回第一条结果对应的实体对象。 (3)更新实体对象并将修改保存到数据库,具体代码如下:/如果查询到了实体对象 if(bo

34、ok != null) /更新属性值 book.Title = JavaScript语言与Ajax应用; book.Price = 30; /保存更改 db.SaveChanges(); 只有在调用 SaveChanges()方法后,更新后的数据才能被写入数据库。 3.2.3 基于 Entity Framework 数据模型的数据更新 利用 Entity Framework 数据模型实现数据的添加和删除非常方便。数据添加通过两个步 骤完成,首先,创建新的数据实体(一个数据实体即表示数据库表中的一行),然后,调用 AddToXXX 方法将数据实体添加到具体的数据库表对象并调用 SaveChang

35、es()方法保存到数据 库即可。数据删除也是通过两个步骤完成,首先,找到需要删除的数据实体,然后,调用 DeleteObject()方法删除数据实体并调用 SaveChanges()方法保存到数据库即可。比如创建一个 新的数据条目,再删除这个数据条目的具体实现代码如下:3.2.3 基于 Entity Framework 数据模型的数据更新 利用 Entity Framework 数据模型实现数据的添加和删除非常方便。数据添加通过两个步 骤完成,首先,创建新的数据实体(一个数据实体即表示数据库表中的一行),然后,调用 AddToXXX 方法将数据实体添加到具体的数据库表对象并调用 SaveCha

36、nges()方法保存到数据 库即可。数据删除也是通过两个步骤完成,首先,找到需要删除的数据实体,然后,调用 DeleteObject()方法删除数据实体并调用 SaveChanges()方法保存到数据库即可。比如创建一个 新的数据条目,再删除这个数据条目的具体实现代码如下:3.2.3 基于 Entity Framework 数据模型的数据更新 using (BookStoreEntities db = new BookStoreEntities() /创建新的数据实体 var newBook = new Books() AuthorName = 张松慧, Title = ASP.NET MVC

37、 程序开发, Price = 29 ; /添加到数据库 db.Books.Add(newBook); /保存到数据库 db.SaveChanges(); /找到需要删除的实体 var delBook = db.Books.FirstOrDefault(b = b.AuthorName = 张松慧); if(delBook != null) /删除实体 db. Books .Remove(delBook); /保存到数据库 db.SaveChanges(); 3.2.3 基于 Entity Framework 数据模型的数据更新 隐式约定是 ASP.NET5 设计时默认规定好的,用户无须额外设置

38、,控制器就按照这种约 定返回对应的视图。这种约定能否被修改呢?答案是肯定的,这一约定可以重写,如果控制器不希望返回默认同名视图,就可以按照语法,重新提供另外一个视图。其实现方法是把另 外的视图名以字符串格式,作为参数传入 return View()中。 本章小结 本章主要介绍了 ASP.NET MVC 项目开发中 Model(数据模型)这一部分的创建和使用。 首先介绍了数据模型在 ASP.NET MVC 项目中的作用,然后分别介绍了基于 LINQ to SQL 数 据模型的创建和基于 Entity Framework 数据模型的创建,最后重点讲解了 Entity Framework 数据模型的使用。 习题一、操作题 1建立数据库 本项目数据库表设计如下,根据数据库表建立数据库,如表 3-1表 3-5 所示。 2创建数据模型 利用本章讲到的方法,从“MvcBookStore”数据库生成基于 Entity Framework 的数据模 型,并将数据模型上下文实体的名称定义为“MvcBookStoreEntities”。数据模型创建好后,双击打开“MvcBookStoreModel.edmx”,可以看到数据模型结构图,如图 3-21 所示。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁