Exercício - Engenharia reversa a partir de um banco de dados existente
O gerente da Contoso Pizza pediu que você adicionasse um ponto de extremidade para que a empresa pudesse exibir cupons em seu aplicativo. Os cupões residem numa base de dados existente. Nesta unidade, você cria scaffolding a partir de um banco de dados existente e modifica a classe de entidade resultante.
Inspecione a base de dados de promoções
Dê uma olhada no banco de dados que você vai usar para gerar o código andaime:
No painel Explorer, expanda o diretório Promoções, clique com o botão direito do mouse no arquivo Promotions.db e selecione Abrir Banco de Dados.
O novo banco de dados é aberto na pasta SQLite Explorer .
Na pasta SQLite Explorer, expanda os nós Promotions.db e Cupons. Observe o esquema de dados.
Clique com o botão direito do mouse no nó Cupons e selecione Mostrar tabela. Inspecione os dados do cupom.
Escale o contexto das promoções e o modelo de cupões
Agora, você usa o banco de dados para andaime o código:
Execute o seguinte comando:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
O comando anterior:
- Scaffolds e classes de modelo usando a cadeia de
DbContext
conexão fornecida. - Especifica o uso do
Microsoft.EntityFrameworkCore.Sqlite
provedor de banco de dados. - Especifica diretórios para as classes resultantes
DbContext
e modelo.
Nota
Neste exercício, você pode ignorar o aviso sobre sua cadeia de conexão estar no código-fonte. Em código do mundo real, sempre armazene suas cadeias de conexão em um local seguro.
- Scaffolds e classes de modelo usando a cadeia de
Abra Modelos\Coupon.cs e inspecione o modelo andaime.
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; } } }
Como o SQLite tem um conjunto limitado de tipos em comparação com o C#, a ferramenta de andaime fez inferências sobre quais tipos de C# usar. Por exemplo, a coluna do banco de dados foi definida como uma cadeia de caracteres porque o
Expiration
SQLite não tem um tipo de dados de data. A ferramenta de andaime inferiu que o tipo C# deve serDateOnly?
baseado nos dados no banco de dados.Gorjeta
Se o banco de dados for alterado, você poderá gerar novos arquivos com andaimes. Os arquivos gerados são substituídos a cada vez, mas são criados como
partial
classes, para que você possa estendê-los com propriedades e comportamentos personalizados em seus próprios arquivos separados.
Adicionar um ponto de extremidade de cupom
Antes de testar o código scaffolded, você precisa adicionar um ponto de extremidade à API. Então, em seguida, você adiciona um novo controlador de API.
Para entender melhor como os controladores de API funcionam, consulte Criar uma API da Web com controladores ASP.NET Core.
Na pasta Controllers, adicione um arquivo chamado CouponController.cs que contém o seguinte código:
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(); } }
Esse código adiciona um ponto de
api/coupon
extremidade à API.No código anterior:
- Um
PromotionsContext
objeto é injetado no construtor. - O
Get
método retorna todos os cupons.
- Um
No Program.cs, substitua o
// Add the PromotionsContext
comentário pelo seguinte código:builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
Este código regista-se no sistema de injeção de
PromotionsContext
dependência.Salve todas as alterações e execute o aplicativo usando
dotnet run
o .
Testar o parâmetro de avaliação
Agora que o endpoint foi adicionado, teste as operações de cupom:
Vá para a interface do usuário Swagger da API como fez em um exercício anterior (ou atualize a interface do usuário existente em seu navegador).
Sob o título Cupom , expanda a operação GET e selecione o botão Experimentar .
Selecione Execute (Executar). O corpo da resposta mostra os cupons do banco de dados:
[ { "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" } ]
Observe que
expiration
é um valor datetime.
Está feito! Você criou e modificou andaimes a partir de um banco de dados existente!