练习 - 添加数据存储

已完成

在开始为披萨实现 Web API 之前,需要添加一个数据存储供你执行操作。

你需要一个 model 类来表示库存中的披萨。 模型包含用于表示披萨特征的属性。 模型用于在 Web API 中传递数据,以及在数据存储中保存披萨选项。

在本单元中,该数据存储是一个简单的本地内存中缓存服务。 在实际应用程序中,可以考虑将数据库(例如 SQL Server)与 Entity Framework Core 结合使用。

创建披萨模型

  1. 运行以下命令以创建 Models 文件夹:

    mkdir Models
    

    在 Visual Studio Code 中选择 Models 文件夹,并添加名为 Pizza.cs 的新文件。

    Screenshot of adding a new file to the Models folder in Visual Studio Code.

    项目根目录现在包含一个带有空 Pizza.cs 文件的 Models 目录。 目录名称 Models 是一种约定。 目录名称来自 Web API 使用的模型-视图-控制器体系结构。

  2. 将以下代码添加到Models/Pizza.cs并保存所做的更改。 此类定义披萨。

    namespace ContosoPizza.Models;
    
    public class Pizza
    {
        public int Id { get; set; }
        public string? Name { get; set; }
        public bool IsGlutenFree { get; set; }
    }
    

添加数据服务

  1. 运行以下命令以创建 Services 文件夹:

    mkdir Services
    

    在 Visual Studio Code 中选择该文件夹,并添加名为 PizzaService.cs 的新文件。

    Screenshot of Visual Studio Code that shows adding a new file to the Services folder.

  2. 将以下代码添加到Services/PizzaService.cs并保存所做的更改。 此代码创建内存中披萨数据服务。

    using ContosoPizza.Models;
    
    namespace ContosoPizza.Services;
    
    public static class PizzaService
    {
        static List<Pizza> Pizzas { get; }
        static int nextId = 3;
        static PizzaService()
        {
            Pizzas = new List<Pizza>
            {
                new Pizza { Id = 1, Name = "Classic Italian", IsGlutenFree = false },
                new Pizza { Id = 2, Name = "Veggie", IsGlutenFree = true }
            };
        }
    
        public static List<Pizza> GetAll() => Pizzas;
    
        public static Pizza? Get(int id) => Pizzas.FirstOrDefault(p => p.Id == id);
    
        public static void Add(Pizza pizza)
        {
            pizza.Id = nextId++;
            Pizzas.Add(pizza);
        }
    
        public static void Delete(int id)
        {
            var pizza = Get(id);
            if(pizza is null)
                return;
    
            Pizzas.Remove(pizza);
        }
    
        public static void Update(Pizza pizza)
        {
            var index = Pizzas.FindIndex(p => p.Id == pizza.Id);
            if(index == -1)
                return;
    
            Pizzas[index] = pizza;
        }
    }
    

    默认情况下,此服务提供一个简单的内存中数据缓存服务,其中包含两个披萨。 我们的 Web API 使用该服务进行演示。 如果先停止再启动 Web API,内存中数据缓存会重置为PizzaService的构造函数中的两个默认披萨。

生成 Web API 项目

运行以下命令以生成应用:

dotnet build

生成成功,且没有任何警告。 如果生成失败,请检查输出以获取故障排除信息。

在下一个单元中,你将创建一个使用 Pizza 模型和 PizzaService 类的控制器。