《asp.net mvc3 高级编程》第四章 模型_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 《asp.net mvc3 高级编程》第四章 模型

《asp.net mvc3 高级编程》第四章 模型

 2013/10/17 23:18:58  我为球狂  博客园  我要评论(0)
  • 摘要:一,建立简单的Model在Models文件夹上右击鼠标,选择“添加”,“类”,如下图所示:建立三类相关联的类代码如下:1publicclassAlbum2{3publicvirtualintAlbumId{get;set;}45publicvirtualintGenreId{get;set;}67publicvirtualintArtistId{get;set;}89publicvirtualstringTitle{get;set;
  • 标签:.net ASP.NET MVC net 编程

一,建立简单的Model

在Models文件夹上右击鼠标,选择“添加”,“类”,如下图所示:

建立三类相关联的类代码如下:

class="code_img_closed" src="/Upload/Images/2013101723/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('d802ad59-d867-469f-b02b-175f1b975cea',event)" src="/Upload/Images/2013101723/2B1B950FA3DF188F.gif" alt="" />
 1 public class Album
 2     {
 3         public virtual int AlbumId { get; set; }
 4 
 5         public virtual int GenreId { get; set; }
 6 
 7         public virtual int ArtistId { get; set; }
 8 
 9         public virtual string Title { get; set; }
10 
11         public virtual decimal Price { get; set; }
12 
13         public virtual string AlbumArtUrl { get; set; }
14 
15         public virtual Genre Genre { get; set; }
16 
17         public virtual Artist Artist { get; set; }
18     }
View Code
1  public class Artist
2     {
3         public virtual int ArtistId { get; set; }
4 
5         public virtual string Name { get; set; }
6     }
View Code
 1     public class Genre
 2     {
 3         public virtual int GenreId { get; set; }
 4 
 5         public virtual string Name { get; set; }
 6 
 7         public virtual string Description { get; set; }
 8 
 9         public virtual List<Album> Albums { get; set; }
10 
11     }
View Code

二、构建基架

1,基架的概念

asp.net mvc 中的基架可以为应用程序的创建、读取、更新和删除功能生成所需的样板代码。基架模板检测模型类(如刚才建的几个类)的定义,然后生成控制器以及该控制器的关联视图。基架知道如何命名控制器、命名视图以及每个组件需要执行什么代码,也知道在应用程序中如何放置这些以使应用程序正常工作。

在ASP.NET MVC3中共有三个基架模板可供选择,如下:

空控制器:

控制器模板会向Controllers文件夹中添加一个具有指定名称且派生自Controller的类(控制器)。这个控制器带有的唯一所做就是Index操作,然后返回一个默然ViewResult实例的代码之外,没有其他任何代码。这个模板不会生成任何视图。

包含空的读/写操作的控制器:

这个模板会向项目中添加一个带有Index、Details、Create、Edit和Delete操作的控制器。虽然控制器内部的操作不是完全空白,但是他们不会执行任何有实际意义的操作,除非向其中添加自己的代码并为它们创建视图。

包含读/写操作和视图的控制器(使用Entity Framework

这个模板不仅生成带有整套Index、Details、Create、Edit和Delete操作的控制器以及需要的所有相关视图,而且还生成了与数据库交互(持久保存数据到数据库或从数据库中读取数据)的代码。为了让模板产生合适的代码,需要选择一个模型类,基架会检测所选择模型的所有属性,然后利用这些信息来创建控制器、视图和数据库访问代码。

如下图所示:

DBA865846290.jpg" alt="" />

 

2、基架和实体框架

EF4.1之后开始支持代码优先的开发风格。代码优先是指可以在不创建数据库模式、也不打开Vs设计器的情况下在SQL中存储或检索信息。可以编写纯C#类,因为EF知道如何将这些类的实例存储到正确的位置。将模型对象中的所有属性都写成虚拟属性,能给EF提供一个指向纯C#类集的钩子(Hook),并为EF启用了一些特性,如高效的修改跟踪机制。实体框架需要知道模型属性值的修改时刻,因为它要在这一时刻生成并执行一个SQL UPDATE语句,使这些改变和数据库保持一致。

代码优先的约定:如果想把一个Album类型的对象存储在数据库中,那么EF就假设是把数据存储在数据库中一个名称Albums的表中;如果要存储的对象中有一个名为ID的属性,那么EF就假设这个属性值就是主键值,并把这个值赋给SQL中对应的自动递增(标识)键列。

DbContext:当使用EF的代码优先方法时,需要使用从EF的DbContext类派生的一个类来访问数据库。该派生类具有一个或多个DbSet<T>类型的字段,类型DbSet<T>中的每一个<T>代表一个想要持久保存的对象。例如下面的类就可以用来存储和检索Album和Artist的信息:

1  public class StoreManagerContext : DbContext
2     {
3         
4         public DbSet<Album> Album { get; set; }
5 
6         public DbSet<Artist> Artist { get; set; }
7     }
View Code

使用先前的数据上下文,可以通过使用LINQ查询,以字母顺序检索出所有的信息,如下代码所示:

1 var db=new StoreManagerContext();
2 
3 var allAlbums=from album in db.Albums
4                      orderby album.Title ascending
5                      select album;
View Code

接着上图所示创建控制器名为“StoreManagerController”,模板选择为“包含读/写操作和视图的控制器(使用Entity Framework)”,选择一个模型类,如“Album (StoreManager.Models)”,数据上下文,选择“新建数据上下文”,视图选择“Razor”,如下图所示:

点击“添加”按钮后,基架将在项目的多个位置添加新文件,会在Models文件添加“StoreManagerContext.cs”文件。想要访问数据库,只需要实例化这个数据上下文类。会在StoreManagerController中添加CRUD等操作,然后根据这些会自动生成对应的视图。

 

发表评论
用户名: 匿名