Упражнение. Реконструирование существующей базы данных

Завершено

Менеджер Contoso Pizza попросил вас добавить конечную точку, чтобы компания отображала купоны в своем приложении. Купоны находятся в существующей базе данных. В этом уроке вы создадите шаблон из существующей базы данных и измените полученный класс сущностей.

Проверка базы данных рекламных акций

Ознакомьтесь с базой данных, которую вы будете использовать для создания шаблонного кода:

  1. На панели Обозреватель разверните каталог Рекламные акции, щелкните правой кнопкой мыши файл Promotions.db и выберите Открыть базу данных.

    Новая база данных откроется в папке Обозреватель SQLite.

  2. В папке SQLite Обозреватель разверните узлы Promotions.db и Coupons. Обратите внимание на схему данных.

  3. Щелкните правой кнопкой мыши узел Coupons и выберите пункт Отобразить таблицу. Просмотрите данные о купонах.

Формирование шаблонов для контекста рекламных акций и модели купонов

Теперь вы используете базу данных для формирования шаблонов кода:

  1. Выполните следующую команду:

    dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models   
    

    Предыдущая команда:

    • Формирование шаблонов DbContext и классов моделей с использованием предоставленной строки подключения.
    • Указывает на использование Microsoft.EntityFrameworkCore.Sqlite поставщика базы данных.
    • Указывает каталоги для полученного DbContext и классов модели.

    Примечание

    В этом упражнении можно игнорировать предупреждение о том, что строка подключения в исходном коде. В реальном коде всегда храните строки подключения в безопасном расположении.

  2. Откройте Models\Coupon.cs. Свойство Expiration определяется как строка, так как sqLite не имеет типа данных datetime. Измените Expiration тип с string? на DateTime. EF Core управляет преобразованием данных даты и времени в строковые данные.

    using System;
    using System.Collections.Generic;
    
    namespace ContosoPizza.Models
    {
        public partial class Coupon
        {
            public long Id { get; set; }
            public string Description { get; set; } = null!;
            public DateTime Expiration { get; set; }
        }
    }
    

    Совет

    Если база данных изменяется, можно создать новые файлы с шаблонами. Созданные файлы каждый раз перезаписываются, но создаются как partial классы, поэтому их можно расширить с помощью пользовательских свойств и поведения в собственных отдельных файлах.

Добавление конечной точки купон

Прежде чем можно будет протестировать шаблонный код, необходимо добавить конечную точку в API. Теперь добавьте новый контроллер API.

Чтобы лучше понять, как работают контроллеры API, см. статью Создание веб-API с помощью контроллеров ASP.NET Core.

  1. В папку Controllers добавьте файл с именем CouponController.cs , содержащий следующий код:

    using ContosoPizza.Data;
    using ContosoPizza.Models;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    
    namespace ContosoPizza.Controllers;
    
    [ApiController]
    [Route("[controller]")]
    public class CouponController : ControllerBase
    {
        PromotionsContext _context;
    
        public CouponController(PromotionsContext context)
        {
            _context = context;
        }
    
        [HttpGet]
        public IEnumerable<Coupon> Get()
        {
            return _context.Coupons
                .AsNoTracking()
                .ToList();
        }
    }
    

    Этот код добавляет конечную api/coupon точку в API.

    В приведенном выше коде:

    • Объект PromotionsContext внедряется в конструктор.
    • Метод Get возвращает список всех купонов.
  2. В Program.cs замените комментарий // Add the PromotionsContext следующим кодом:

    builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
    

    Этот код регистрируется PromotionsContext в системе внедрения зависимостей.

  3. Сохраните все изменения и запустите приложение с помощью dotnet run.

Тестирование конечной точки

Теперь, когда конечная точка добавлена, протестируйте купон операции:

  1. Перейдите к пользовательскому интерфейсу Swagger API, как вы делали в предыдущем упражнении (или обновите существующий пользовательский интерфейс в браузере).

  2. Под заголовком Купон разверните операцию GET и выберите Попробовать.

  3. Нажмите кнопку Выполнить. В тексте ответа отображаются купоны из базы данных:

    [
    {
        "id": 1,
        "description": "Buy 1 get 1 free",
        "expiration": "2025-01-01T00:00:00"
    },
    {
        "id": 2,
        "description": "4 large pizzas for $40",
        "expiration": "2024-06-30T00:00:00"
    }
    ]
    

    Обратите внимание, что expiration является значением datetime.

Вот и все! Вы создали и изменили процесс формирования шаблонов на основе существующей базы данных!