新增模型與控制器

下載已完成的專案

在本節中,您將新增定義資料庫實體的模型類別。 然後,您將新增 Web API 控制器,以在這些實體上執行 CRUD 作業。

新增模型類別

在本教學課程中,我們將使用 Entity Framework (EF) 的「Code First」方法來建立資料庫。 使用 Code First,您可以撰寫對應至資料庫資料表的 C# 類別,而 EF 會建立資料庫。 (如需詳細資訊,請參閱 Entity Framework 開發方法。)

首先,我們將領域物件定義為 POCO (一般舊的 CLR 物件)。 我們將建立下列 POCO:

  • 作者
  • 書籍

在方案總管中,以滑鼠右鍵按一下 Models 資料夾。 選取 [新增],然後選取 [類別]。 將類別命名為 Author

Screenshot of the Solution Explorer folder showing the Models folder highlighted in blue and the Add and Class menu items highlighted in yellow.[方案總管] 資料夾的螢幕擷取畫面,其中顯示以藍色醒目提示的 Models 資料夾,以及以黃色醒目提示的 [新增] 和 [類別] 功能表項目。

將 Author.cs 中的所有未定案程式碼替換為以下程式碼。

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace BookService.Models
{
    public class Author
    {
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
    }
}

新增另一個類別,名為 Book,並使用以下程式碼。

using System.ComponentModel.DataAnnotations;

namespace BookService.Models
{
    public class Book
    {
        public int Id { get; set; }
        [Required]
        public string Title { get; set; }
        public int Year { get; set; }
        public decimal Price { get; set; }
        public string Genre { get; set; }

        // Foreign Key
        public int AuthorId { get; set; }
        // Navigation property
        public Author Author { get; set; }
    }
}

Entity Framework 會使用這些模型來建立資料庫資料表。 針對每個模型,Id 屬性會成為資料庫資料表的主索引鍵欄。

在 Book 類別中,AuthorId 定義了一個指向 Author 資料表的外鍵。 (為了簡單起見,我假設每本書都有單一作者。) 圖書類別也包含與 Author 相關的導覽屬性。 您可以使用導覽屬性在程式碼中存取相關的Author。 我在第 4 部分「處理實體關聯性」中詳細介紹了導覽屬性。

新增 Web API 控制器

在本結中,我們將新增支援 CRUD 作業 (建立、讀取、更新和刪除) 的 Web API 控制器。 控制器會使用 Entity Framework 與資料庫層通訊。

首先,您可以刪除 Controllers/ValuesController.cs 檔案。 此檔案包含範例 Web API 控制器,但您不需要此教學課程。

[方案總管] 視窗的螢幕擷取畫面,其中顯示 Values Controllers.cs 檔案被以紅色醒目提示,指出該檔案必須刪除。

接下來,組建專案。 Web API 樣板會使用反射來尋找模型類別,因此它需要已編譯的組件。

在方案總管中,以滑鼠右鍵按一下 Controllers 資料夾。 選取 [新增],然後選取 [控制器]。

[方案總管] 視窗的螢幕擷取畫面,其中 [控制器] 資料夾,以及 [新增] 和 [控制器] 功能表項目以藍色與黃色醒目顯示。

新增 Scaffold 對話方塊中,選取「使用 Entity Framework 的 Web API 2 控制器及其操作」。 按一下新增

Screenshot of the Add Scaffold dialog showing the Web A P I 2 Controller with actions using Entity Framework option highlighted in blue.此為[新增 Scaffold] 對話方塊的螢幕截圖,顯示具有使用 Entity Framework 選項的 Web API 2 控制器,其動作選項以藍色顯示。

新增控制項對話方塊中,執行下列動作:

  1. 在模型類下拉式清單中,選取 類別。 (如果您沒有在下拉式清單中看到它,請確定您已組建專案。)
  2. 勾選 [使用非同步控制器動作]。
  3. 將控制器名稱保留為「AuthorsController」。
  4. 按一下資料內容類別旁邊的加號 (+) 按鈕。

Screenshot of the Add Controller dialog showing the plus button circled in red and the Author class selected in the Model class dropdown.[新增控制器] 對話方塊的螢幕擷取畫面,其中顯示用紅色圈出的加號按鈕,以及在模型類別下拉式選單中已選擇的 Author 類別。

在 [新增資料內容] 對話方塊中,保留預設名稱,然後按一下 [新增]。

[新增資料內容] 對話方塊的螢幕擷取畫面,其中顯示 [新增資料內容類型] 欄位中的預設名稱。

按一下新增以完成新增控制器對話框。 對話方塊會將兩個類別新增至您的專案:

  • AuthorsController 定義 Web API 控制器。 控制器會實作 REST API,用戶端會用來在作者清單上執行 CRUD 作業。
  • BookServiceContext 管理執行時期的實體物件,包括將資料從資料庫填入物件、變更追蹤,以及將資料持久化至資料庫。 它繼承自 DbContext

此時,請再次組建專案。 請執行相同的步驟,以新增 Book 實體的 API 控制器。 這次,請選取 Book 作為模型類別,然後選取資料內容類別的現有 BookServiceContext 類別。 (請勿建立新的資料內容。) 按一下 [新增] 以新增控制器。

[新增控制器] 視窗的截圖,顯示在 [模型類] 下拉式功能表中已選擇 [書籍] 類別。