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

Slutförd

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:

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

  2. I mappen SQLite Explorer expanderar du noderna Promotions.db och Coupons . 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 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.

  2. Öppna Models\Coupon.cs. Egenskapen Expiration definieras som en sträng eftersom SQLite inte har någon datetime-datatyp. Expiration Ändra typen från string? till DateTime. 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.

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

Klart! Du har skapat och ändrat byggnadsställningar från en befintlig databas!