Övning – Omvänd tekniker från en befintlig databas
Chefen för Contoso Pizza har bett dig att lägga till en slutpunkt så att företaget kan visa kuponger i sin app. Kuponger finns i en befintlig databas. I den här lektionen skapar du byggnadsställningar från en befintlig databas och ändrar den resulterande entitetsklassen.
Granska databasen för kampanjer
Ta en titt på den databas som du använder för att generera den kod som har skapats:
Expandera katalogen Kampanjer i Explorer-fönstret, högerklicka på filen Promotions.db och välj sedan Öppna databas.
Den nya databasen öppnas i mappen SQLite Explorer .
I mappen SQLite Explorer expanderar du noderna Promotions.db och Coupons . Observera dataschemat.
Högerklicka på noden Kuponger och välj Visa tabell. Granska kupongdata.
Autogenerera kampanjkontexten och kupongmodellen
Nu använder du databasen för att skapa kod:
Kör följande kommando:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
Kommandot ovan:
- Byggnadsställningar och modellklasser
DbContext
med hjälp av den angivna anslutningssträngen. - Anger att databasprovidern ska användas
Microsoft.EntityFrameworkCore.Sqlite
. - Anger kataloger för de resulterande
DbContext
klasserna och modellklasserna.
Anteckning
I den här övningen kan du ignorera varningen om att anslutningssträngen finns i källkoden. Lagra alltid anslutningssträngarna på en säker plats i verklig kod.
- Byggnadsställningar och modellklasser
Öppna Models\Coupon.cs. Egenskapen
Expiration
definieras som en sträng eftersom SQLite inte har någon datetime-datatyp.Expiration
Ändra typen frånstring?
tillDateTime
. EF Core hanterar konverteringen av datetime-data till strängdata.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; } } }
Tips
Om databasen ändras kan du generera nya autogenererade filer. De genererade filerna skrivs över varje gång, men de skapas som
partial
klasser, så du kan utöka dem med anpassade egenskaper och beteenden i dina egna, separata filer.
Lägga till en kupongslutpunkt
Innan du kan testa den byggnadsgenererade koden måste du lägga till en slutpunkt i API:et. Sedan lägger du till en ny API-kontrollant.
Mer information om hur API-kontrollanter fungerar finns i Skapa ett webb-API med ASP.NET Core kontrollanter.
I mappen Controllers lägger du till en fil med namnet CouponController.cs som innehåller följande kod:
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(); } }
Den här koden lägger till en
api/coupon
slutpunkt i API:et.I koden ovan:
- Ett
PromotionsContext
objekt matas in i konstruktorn. - Metoden
Get
returnerar alla kuponger.
- Ett
I Program.cs ersätter du kommentaren
// Add the PromotionsContext
med följande kod:builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
Den här koden registreras
PromotionsContext
med beroendeinmatningssystemet.Spara alla ändringar och kör appen med hjälp
dotnet run
av .
Testa slutpunkten
Nu när slutpunkten har lagts till testar du kupongåtgärderna:
Gå till API:ets Swagger-användargränssnitt som du gjorde i en tidigare övning (eller uppdatera det befintliga användargränssnittet i webbläsaren).
Under rubriken Kupong expanderar du GET-åtgärden och väljer Prova.
Välj Kör. Svarstexten visar kuponger från databasen:
[ { "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" } ]
Observera att är
expiration
ett datetime-värde.
Klart! Du har skapat och ändrat byggnadsställningar från en befintlig databas!