Övning – Omvänd tekniker från en befintlig databas

Slutförd

Contoso Pizzas chef bad 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 kampanjdatabasen

Ta en titt på databasen som du ska använda för att generera den kod som har skapats:

  1. I fönstret Utforskaren expanderar du katalogen Kampanjer, högerklickarfilen Promotions.db och väljer sedan Öppna databas.

    Den nya databasen öppnas i mappen SQLite Explorer .

  2. I mappen SQLite Explorer expanderar du noderna Promotions.db och Kuponger. Observera dataschemat.

  3. 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:

  1. 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 de angivna anslutningssträng.
    • Anger att databasprovidern ska Microsoft.EntityFrameworkCore.Sqlite användas.
    • Anger kataloger för de resulterande DbContext klasserna och modellklasserna.

    Kommentar

    I den här övningen kan du ignorera varningen om att din anslutningssträng finns i källkoden. Lagra alltid dina anslutningssträng på en säker plats i verklig kod.

  2. Öppna Models\Coupon.cs och inspektera den scaffolded modellen.

    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; }
        }
    }
    

    Eftersom SQLite har en begränsad uppsättning typer jämfört med C# har verktyget för byggnadsställningar dragit slutsatser om vilka C#-typer som ska användas. Databaskolumnen Expiration definierades till exempel som en sträng eftersom SQLite inte har någon datumdatatyp. Verktyget scaffolding drog slutsatsen att C#-typen ska DateOnly? baseras på data i databasen.

    Dricks

    Om databasen ändras kan du generera nya scaffolded-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 kod som skapats med hjälp av en kod måste du lägga till en slutpunkt i API:et. Nu lägger du alltså till en ny API-kontrollant.

Mer information om hur API-kontrollanter fungerar finns i Skapa ett webb-API med ASP.NET Core-styrenheter.

  1. 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.
  2. 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.

  3. Spara alla ändringar och kör appen med hjälp dotnet runav .

Testa slutpunkten

Nu när slutpunkten har lagts till testar du kupongåtgärderna:

  1. 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).

  2. Under rubriken Kupong expanderar du GET-åtgärden och väljer knappen Prova .

  3. 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 det expiration är ett datetime-värde.

Det var allt! Du har skapat och ändrat byggnadsställningar från en befintlig databas!