Упражнение. Обратный инженер из существующей базы данных
Менеджер Contoso Pizza попросил добавить конечную точку, чтобы компания может отображать купоны в своем приложении. Купоны находятся в существующей базе данных. В этом уроке вы создадите шаблон из существующей базы данных и измените полученный класс сущности.
Проверка базы данных рекламных акций
Ознакомьтесь с базой данных, которую вы собираетесь использовать для создания шаблонного кода:
В области обозревателя разверните каталог "Продвижение", щелкните правой кнопкой мыши файл Promotions.db и выберите "Открыть базу данных".
Новая база данных откроется в папке SQLite Explorer .
В папке SQLite Explorer разверните узлы Promotions.db и купонов . Обратите внимание на схему данных.
Щелкните правой кнопкой мыши узел Coupons и выберите пункт Отобразить таблицу. Просмотрите данные о купонах.
Формирование шаблонов для контекста рекламных акций и модели купонов
Теперь вы используете базу данных для формирования шаблона кода:
Выполните следующую команду:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
Предыдущая команда:
- Шаблоны и классы
DbContext
моделей с помощью предоставленного строка подключения. - Указывает, чтобы использовать
Microsoft.EntityFrameworkCore.Sqlite
поставщик базы данных. - Указывает каталоги для полученного
DbContext
и классов модели.
Примечание.
В этом упражнении можно игнорировать предупреждение о строка подключения в исходном коде. В реальном коде всегда храните строка подключения в безопасном расположении.
- Шаблоны и классы
Откройте 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 основных контроллеров".
В папке 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
это значение даты и времени.
Вот и все! Вы создали и изменили шаблон из существующей базы данных!