• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Code First模式的ASP.NET MVC應(yīng)用開發(fā)

      2012-11-25 02:37:16趙增敏唐惠康
      制造業(yè)自動化 2012年6期
      關(guān)鍵詞:主鍵實體模型視圖

      趙增敏,吳 潔,唐惠康

      ZHAO Zeng-min, WU Jie, TANG Hui-kang

      (河南信息工程學(xué)校,鄭州 450008)

      0 引言

      開發(fā)ASP.NET MVC應(yīng)用程序時,通常是首先創(chuàng)建數(shù)據(jù)庫,然后通過編寫代碼來實現(xiàn)數(shù)據(jù)庫訪問。這種開發(fā)模式已得到了廣泛應(yīng)用,但也存在著性能差、效率低等缺點。隨著ASP.NET Entity Framework 4.1的發(fā)布,推出了一種稱為Code First的新開發(fā)模式,可從代碼開始數(shù)據(jù)庫應(yīng)用開發(fā)。本文從模型、控制器和視圖3個方面對這種開發(fā)模式進行了詳細研究。

      1 創(chuàng)建項目

      在VS2010中新建一個項目,選擇Visual C#語言,選擇ASP.NET MVC 3 Web應(yīng)用程序模板,依次選擇Internet應(yīng)用程序和Razor視圖引擎。對類庫EntityFramework的引用將自動添加到項目中。

      2 創(chuàng)建實體模型

      創(chuàng)建實體模型是Code First開發(fā)的關(guān)鍵所在。對于每個實體模型,均需創(chuàng)建一個類。這些類不需要派生自任何Entity Framework類或其他基類,也不必實現(xiàn)任何接口。在本文中定義了產(chǎn)品和產(chǎn)品類別兩個實體模型類:

      public class Product {

      public int ProductID {get; set;}

      public int CategoryID {get; set;}

      public string ProductName {get; set;}

      public decimal UnitPrice {get; set;}

      public int UnitsInStock { get; set; }}

      public class Category {

      public int CategoryID {get; set;}

      public string CategoryName {get; set;}}

      2.1 創(chuàng)建主鍵

      為了保證表完整性,每個表中都必須有一個主鍵,這就需要在某個列或多個列的組合上定義一個PRIMARY KEY約束。

      在Code First模式下,可通過屬性名稱來“推測”主鍵:聲明實體模型類時若將某屬性命名為ID或<類名>ID,則該屬性將被推斷為主鍵。主鍵檢測與大小寫無關(guān)。若主鍵為int、long或short類型,還會注冊為標(biāo)識列。例如,Product類的ProductID屬性和Category類的CategoryID就屬于這種情況,它們既是主鍵又是標(biāo)識列。

      2.2 創(chuàng)建主外鍵關(guān)系

      為了保證表與表之間的數(shù)據(jù)完整性,要求主表中主鍵與從表中外鍵是一致的,這需要在從表上創(chuàng)建FOREIGN KEY約束。

      在Code First模式下,可通過在相關(guān)聯(lián)的類中添加虛屬性來實現(xiàn)主外鍵關(guān)系。例如,本文中的Product類和Category類分別表示產(chǎn)品和產(chǎn)品類別,兩者之間顯然存在著關(guān)聯(lián)。為了實現(xiàn)這種關(guān)聯(lián),可在Product類中添加Category虛屬性:

      public virtual Category Category {get; set;}

      同時在Category類中添加Products虛屬性:

      public virtual ICollection<Product> Products{get; set;}

      這樣,將會自動創(chuàng)建主外鍵關(guān)系來管理這些關(guān)聯(lián),還會在后臺延遲加載數(shù)據(jù)。

      2.3 使用數(shù)據(jù)標(biāo)注

      在Code First開發(fā)模式下,數(shù)據(jù)驗證可以利用System. ComponentModel.DataAnnotations命名空間中提供的一組特性類來實現(xiàn)。這些特性類也稱為數(shù)據(jù)標(biāo)注,可用于定義實體模型類中各個數(shù)據(jù)字段的行為。對于同一個屬性可同時應(yīng)用多個標(biāo)注。

      在下面的示例中,對ProductName字段應(yīng)用了Display和Required標(biāo)注,并指定了中文名稱和未輸入值時顯示的錯誤信息。

      [Display(Name="產(chǎn)品名稱")]

      [Required(ErrorMessage="產(chǎn)品名稱不能為空")]

      public string ProductName {get; set;}

      3 創(chuàng)建數(shù)據(jù)上下文

      為了將實體模型類映射到數(shù)據(jù)庫中,必須創(chuàng)建數(shù)據(jù)上下文類。該類必須滿足下列要求:派生自System.Data. Entity.DbContext;對于每個實體集定義一個可讀寫屬性;每個屬性均為System.Data.Entity.DbSet<T>類型,其中T為實體的類型。

      在第四紀(jì)和新近紀(jì)土體中,天然孔隙比、壓縮系數(shù)、固結(jié)速率等物理力學(xué)指標(biāo)與地面沉降有著密切的聯(lián)系,一般隨深度增加,黏性土體壓縮性降低,而砂性土體的密

      在本文中,創(chuàng)建了一個名稱為StoreContext的數(shù)據(jù)上下文類,并定義了兩個實體集屬性,代碼如下:

      using System.Data.Entity;

      public class StoreContext : DbContext {

      public DbSet<Product> Products {get; set;}

      public DbSet<Category> Categories {get; set;}}

      4 配置數(shù)據(jù)庫連接

      傳統(tǒng)模式下,可通過ADO.NET Connection對象實現(xiàn)數(shù)據(jù)庫連接。使用Code First開發(fā)模式時,將會自動在SQL Server Express實例中創(chuàng)建一個與DbContext名稱相同的數(shù)據(jù)庫,并且自動連接到該數(shù)據(jù)庫。也可以在項目的Web.config文件中添加連接字符串,以指定數(shù)據(jù)提供程序和現(xiàn)有數(shù)據(jù)庫的位置。

      5 實現(xiàn)CRUD操作

      CRUD是指在進行數(shù)據(jù)處理時的增加(Create)、查詢(Retrieve)、更新(Update)和刪除(Delete)操作,這些操作需要對每個實體創(chuàng)建控制器和相應(yīng)視圖來實現(xiàn)。安裝ASP.NET MVC 3工具更新后,VS2010中的“添加控制器”對話框得到增強,提供了更多基架選項,可快速生成控制器和視圖。

      5.1 添加控制器

      為了實現(xiàn)對數(shù)據(jù)庫的各種基本操作,需要對每個實體創(chuàng)建一個控制器,每個控制器包含一組操作方法。

      若要添加控制器,可右擊“解決方案資源管理器”中的Models文件夾,然后選擇“添加”→“控制器”,當(dāng)彈出“添加控制器”對話框時,指定控制器名稱,設(shè)置基架選項,選擇“包含讀/寫操作和視圖的控制器(使用Entity Framework)”,選擇模型類、數(shù)據(jù)上下文類及Razor視圖。

      5.2 控制器類

      在控制器類中,需要創(chuàng)建一個數(shù)據(jù)上下文對象,并通過各種操作方法來實現(xiàn)數(shù)據(jù)庫訪問。這些操作方法包括:用于呈現(xiàn)數(shù)據(jù)的Index方法;用于添加數(shù)據(jù)的Create方法;用于修改數(shù)據(jù)的Edit方法;用于刪除數(shù)據(jù)的Delete和DeleteConfirmed方法。在正確創(chuàng)建實體模型的前提下,VS2010將會自動生成這些操作方法的代碼。

      操作方法分為兩類:一類僅用于處理HTTP GET請求,另一類僅用于處理HTTP POST請求。默認情況下操作方法可用于HTTP GET請求。若某操作方法是在提交表單時調(diào)用的,則需要對該方法應(yīng)用HttpPost特性。對于DeleteConfirmed方法,除了應(yīng)用HttpPost特性之外,還要應(yīng)用ActionName("Delete")特性以指定操作名稱。

      對于有參操作方法,可向其傳遞實體ID或?qū)嶓w對象本身作為參數(shù)。實體ID可在單擊超鏈接或提交表單時傳遞到方法中。實體對象在提交表單時傳遞到方法中,其屬性值由相應(yīng)表單域確定。

      5.3 創(chuàng)建視圖

      除DeleteConfirmed方法外,產(chǎn)品控制器類中的所有其他操作方法都要求創(chuàng)建相應(yīng)視圖。若在添加控制器時選擇“包含讀/寫操作和視圖的控制器(使用Entity Framework)”模板和Razor視圖,則會自動生成視圖。

      5.3.1 使用@model指令引用強類型模型

      @model指令是ASP.NET MVC 3提供的一項新功能,它實現(xiàn)了視圖對強類型模型的引用,以便在視圖模板中直接訪問從控制器類中傳遞過來的模型。

      5.3.2 呈現(xiàn)HTML控件

      通過@model指令引用所需的強類型模型后,即可使用System.Web.Mvc.Html命名空間中的相關(guān)類來呈現(xiàn)各種HTML控件,并使用擴展方法對這些控件進行設(shè)置。

      6 結(jié)束語

      Code First 模式的關(guān)鍵是創(chuàng)建實體模型類并實現(xiàn)數(shù)據(jù)完整性和數(shù)據(jù)驗證。有了合用的實體模型,即可借助于VS2010 快速生成控制器和視圖,從而實現(xiàn)CRUD 功能。

      [1] Vincent-Philippe Lauzon. Entity Framework 4.1: Basics(1). http://vincentlauzon.wordpress.com/2011/04/03/entity-framework-4-1-basics-1/.

      [2] Microsoft. ASP.NET MVC 3 Tools Update 發(fā)行說明.

      猜你喜歡
      主鍵實體模型視圖
      基于Go 實現(xiàn)的分布式主鍵系統(tǒng)研究
      基于外鍵的E-R圖繪制方法研究
      5.3 視圖與投影
      視圖
      Y—20重型運輸機多視圖
      SA2型76毫米車載高炮多視圖
      建筑設(shè)計中的實體模型
      建筑設(shè)計中的實體模型
      數(shù)據(jù)庫主鍵的設(shè)計方法探討
      淺談數(shù)據(jù)庫主鍵設(shè)計的原則
      安龙县| 垫江县| 海安县| 喀喇沁旗| 历史| 青川县| 行唐县| 南平市| 遵化市| 岑巩县| 阿鲁科尔沁旗| 防城港市| 淄博市| 广元市| 正定县| 县级市| 湛江市| 无极县| 龙里县| 万载县| 平舆县| 曲周县| 澎湖县| 金溪县| 安义县| 罗源县| 高唐县| 洞口县| 湘阴县| 临朐县| 洮南市| 汝南县| 叶城县| 阿坝县| 柳州市| 丰原市| 正定县| 建水县| 宁强县| 仁布县| 武隆县|