前言
在本部分中,你将添加用于定義資料庫實體的模型類。然後你将添加用于在這些實體上執行CRUD(Create、Retrieve、Update、Delete——譯者注)操作的Web API 控制器。
添加模型類
在本教程中,我們将通過使用“Code First”的方法對實體架構(EF)來建立資料庫。對于Code First,你寫C#類來相應資料庫表,使用EF來建立資料庫。(有關詳細資訊,見Entity Framework Development Approaches.)
首先,我們定義我們的域對象作為POCO。我們将建立以下POCO:
Author
Book
在解決方案資源管理中,右擊Models檔案夾。選擇Add,然後選擇Class。名為這個類為Author。
用以下代碼替換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表。(簡單起見,我假定每本書隻有一個作者。)該book類還包含一個導航屬性給相關的Author。 你可以使用導航屬性在代碼中通路相關的作者。我在
【Web API系列教程】3.4 — 實戰:處理資料(處理實體關系)中描述了關于導航屬性的更多資訊。
添加Web API 控制器
在這部分,我們将添加支援CRUD(create, read, update 和 delete)的Web API 控制器。這些控制器使用Entity Framework來同資料庫層交流。
首先,你應該删除Controllers目錄下的ValuesControllers.cs檔案。這個檔案包含了一個Web API示例,但對于本教程你并不需要它。
然後,編譯這個項目。Web API架構使用反射來發現這個模型類,是以它需要編譯程式集。
在Solution Explorer中,右擊Controllers檔案夾。選擇Add,然後選擇Controller。
在Add Scaffold對話框中,選擇“Web API 2 controller with actions, using Entity Framework”。點選Add。
在Add Controller對話框中,執行以下操作:
1, 在模型類下拉框中,選擇Author類。(如果你沒有在下拉框中看到它,請確定已經編譯了這個項目。)
2, 選中“Use async controller action”。
3, 保留控制器名稱為“AuthorsController”。
4, 點選加号(+)按鈕下一步到Data Context Class.
在New Data Context對話框中,保留預設名稱并點選Add。
點選Add以完成Add Controller對話框。這個對話将添加兩個類到你的項目中:
AuthorsController定義了一個Web API控制器。這個控制器實作了REST API,用戶端使用它來在authors清單上執行CRUD操作。
BookServiceContext在運作時管理實體對象,包括從資料庫中聚集對象資料、追蹤、保留資料到資料庫。它繼承自DBContext。
在這個節點上,再次編譯這個項目。現在再過一遍相同的步驟為Book實體添加API控制器。這次選擇Book作為模型類,并選擇已經存在的BookServiceContext類作為資料上下文類。(不要再建立新的資料上下文。)點選Add以添加該控制器。