在本部分中,你将添加定义数据库实体的模型类。 然后,添加对这些实体执行 CRUD 操作的 Web API 控制器。
添加模型类
在本教程中,我们将使用 Entity Framework(EF)的“Code First”方法创建数据库。 使用 Code First 编写对应于数据库表的 C# 类,EF 将创建数据库。 (有关详细信息,请参阅 Entity Framework 开发方法。
首先将域对象定义为 POCO(普通旧 CLR 对象)。 我们将创建以下 POCO:
- 作者
- 书籍
在解决方案资源管理器中,右键单击“模型”文件夹。 选择 “添加”,然后选择“ 类”。 将类 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; }
}
}
实体框架将使用这些模型来创建数据库表。 对于每个模型,该 Id 属性将成为数据库表的主键列。
在 Book 类中,AuthorId 定义了指向 Author 表的外键。 (为简单起见,我假设每本书都有一个作者。书籍类还包含相关 Author导航属性。 可以使用导航属性访问代码中的相关 Author 内容。 我在第 4 部分中详细介绍导航属性, 即处理实体关系。
添加 Web API 控制器
在本部分中,我们将添加支持 CRUD 操作的 Web API 控制器(创建、读取、更新和删除)。 控制器将使用 Entity Framework 与数据库层通信。
首先,可以删除文件控制器/ValuesController.cs。 此文件包含一个示例 Web API 控制器,但本教程不需要它。
接下来,构建项目。 Web API 基架使用反射来查找模型类,因此需要编译的程序集。
在解决方案资源管理器中,右键单击“控制器”文件夹。 选择 “添加”,然后选择“ 控制器”。
在 “添加基架 ”对话框中,选择“包含操作的 Web API 2 控制器,使用 Entity Framework”。 单击 添加。
在 “添加控制器 ”对话框中,执行以下操作:
- 在 Model 类 下拉列表中,选择该
Author类。 (如果未在下拉列表中看到它,请确保已构建项目。) - 选中“使用异步控制器操作”。
- 将控制器名称保留为“AuthorsController”。
- 单击 数据上下文类旁边的加号(+)按钮。
在“ 新建数据上下文 ”对话框中,保留默认名称,然后单击“ 添加”。
单击“ 添加” 以完成 “添加控制器 ”对话框。 该对话框向项目添加两个类:
-
AuthorsController定义 Web API 控制器。 控制器实现客户端用于对作者列表执行 CRUD 操作的 REST API。 -
BookServiceContext在运行时管理实体对象,包括使用数据库中的数据填充对象、更改跟踪并将数据保存到数据库。 它继承自DbContext.
解决方案资源管理器窗口的屏幕截图,其中已用红色圆圈标出 AuthorsController.cs 文件和 BookServiceContext.cs 文件。
此时,再次构建项目。 现在,请完成相同的步骤,为 Book 实体添加 API 控制器。 这一次,选择 Book 模型类,并为数据上下文类选择现有 BookServiceContext 类。 (不要创建新的数据上下文。单击“ 添加” 以添加控制器。