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