Упражнение. Реконструирование существующей базы данных
Менеджер Contoso Pizza попросил вас добавить конечную точку, чтобы компания отображала купоны в своем приложении. Купоны находятся в существующей базе данных. В этом уроке вы создадите шаблон из существующей базы данных и измените полученный класс сущностей.
Проверка базы данных рекламных акций
Ознакомьтесь с базой данных, которую вы будете использовать для создания шаблонного кода:
На панели Обозреватель разверните каталог Рекламные акции, щелкните правой кнопкой мыши файл Promotions.db и выберите Открыть базу данных.
Новая база данных откроется в папке Обозреватель SQLite.
В папке SQLite Обозреватель разверните узлы Promotions.db и Coupons. Обратите внимание на схему данных.
Щелкните правой кнопкой мыши узел Coupons и выберите пункт Отобразить таблицу. Просмотрите данные о купонах.
Формирование шаблонов для контекста рекламных акций и модели купонов
Теперь вы используете базу данных для формирования шаблонов кода:
Выполните следующую команду:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
Предыдущая команда:
- Формирование шаблонов
DbContext
и классов моделей с использованием предоставленной строки подключения. - Указывает на использование
Microsoft.EntityFrameworkCore.Sqlite
поставщика базы данных. - Указывает каталоги для полученного
DbContext
и классов модели.
Примечание
В этом упражнении можно игнорировать предупреждение о том, что строка подключения в исходном коде. В реальном коде всегда храните строки подключения в безопасном расположении.
- Формирование шаблонов
Откройте 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.
В папку 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
возвращает список всех купонов.
- Объект
В Program.cs замените комментарий
// Add the PromotionsContext
следующим кодом:builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
Этот код регистрируется
PromotionsContext
в системе внедрения зависимостей.Сохраните все изменения и запустите приложение с помощью
dotnet run
.
Тестирование конечной точки
Теперь, когда конечная точка добавлена, протестируйте купон операции:
Перейдите к пользовательскому интерфейсу Swagger API, как вы делали в предыдущем упражнении (или обновите существующий пользовательский интерфейс в браузере).
Под заголовком Купон разверните операцию GET и выберите Попробовать.
Нажмите кнопку Выполнить. В тексте ответа отображаются купоны из базы данных:
[ { "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.
Вот и все! Вы создали и изменили процесс формирования шаблонов на основе существующей базы данных!