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

Завершено

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

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

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

  1. В области обозревателя разверните каталог "Продвижение", щелкните правой кнопкой мыши файл Promotions.db и выберите "Открыть базу данных".

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

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

  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. Откройте model\Coupon.cs и проверьте шаблонную модель.

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

    Так как SQLite имеет ограниченный набор типов по сравнению с C#, средство формирования шаблонов сделало вывод о том, какие типы C# следует использовать. Например, столбец базы данных был определен как строка, Expiration так как SQLite не имеет типа данных даты. Средство формирования шаблонов указывает, что тип C# должен основываться DateOnly? на данных в базе данных.

    Совет

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

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

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

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

  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 это значение даты и времени.

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