zoukankan      html  css  js  c++  java
  • 《asp.net mvc3 高级编程》第四章 模型

    一,建立简单的Model

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

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

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

    如下图所示:

    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等操作,然后根据这些会自动生成对应的视图。

  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/liangdaye/p/3375087.html
Copyright © 2011-2022 走看看