Ćwiczenie — odwrotny inżynier z istniejącej bazy danych

Ukończone

Menedżer firmy Contoso Pizza poprosił Cię o dodanie punktu końcowego, aby firma mogła wyświetlać kupony w swojej aplikacji. Kupony znajdują się w istniejącej bazie danych. W tej lekcji utworzysz szkielet z istniejącej bazy danych i zmodyfikujesz wynikową klasę jednostek.

Sprawdzanie bazy danych promocji

Przyjrzyj się bazie danych, której użyjesz do wygenerowania kodu szkieletowego:

  1. W okienku Eksplorator rozwiń katalog Promocje, kliknij prawym przyciskiem myszy plik Promotions.db, a następnie wybierz polecenie Otwórz bazę danych.

    Nowa baza danych zostanie otwarta w folderze SQLite Explorer .

  2. W folderze SQLite Explorer rozwiń węzły Promotions.db i Kupony . Zanotuj schemat danych.

  3. Kliknij prawym przyciskiem myszy węzeł Kupony i wybierz polecenie Pokaż tabelę. Sprawdź dane kuponu.

Tworzenie szkieletu kontekstu promocji i modelu kuponu

Teraz użyjesz bazy danych do utworzenia szkieletu kodu:

  1. Uruchom następujące polecenie:

    dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models   
    

    Poprzednie polecenie:

    • Szkielety DbContext i klasy modeli przy użyciu podanej parametry połączenia.
    • Określa, aby używać dostawcy Microsoft.EntityFrameworkCore.Sqlite bazy danych.
    • Określa katalogi dla wynikowych DbContext i klas modelu.

    Uwaga

    W tym ćwiczeniu możesz zignorować ostrzeżenie dotyczące parametry połączenia w kodzie źródłowym. W rzeczywistym kodzie zawsze przechowuj parametry połączenia w bezpiecznej lokalizacji.

  2. Otwórz plik Models\Coupon.cs i sprawdź model szkieletowy.

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

    Ponieważ sqLite ma ograniczony zestaw typów w porównaniu z C#, narzędzie tworzenia szkieletów wykonane wnioskowanie co do typów języka C# do użycia. Na przykład kolumna Expiration bazy danych została zdefiniowana jako ciąg, ponieważ sqlite nie ma typu danych daty. Narzędzie do tworzenia szkieletów wywnioskło, że typ języka C# powinien być DateOnly? oparty na danych w bazie danych.

    Napiwek

    Jeśli baza danych ulegnie zmianie, możesz wygenerować nowe pliki szkieletowe. Wygenerowane pliki są zastępowane za każdym razem, ale są tworzone jako partial klasy, dzięki czemu można je rozszerzyć za pomocą właściwości niestandardowych i zachowań we własnych, oddzielnych plikach.

Dodawanie punktu końcowego kuponu

Przed przetestowaniem kodu szkieletowego należy dodać punkt końcowy do interfejsu API. Następnie dodasz nowy kontroler interfejsu API.

Aby lepiej zrozumieć, jak działają kontrolery interfejsu API, zobacz Tworzenie internetowego interfejsu API przy użyciu kontrolerów ASP.NET Core.

  1. W folderze Controllers dodaj plik o nazwie CouponController.cs zawierający następujący 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();
        }
    }
    

    Ten kod dodaje api/coupon punkt końcowy do interfejsu API.

    Powyższy kod:

    • Obiekt PromotionsContext jest wstrzykiwany do konstruktora.
    • Metoda Get zwraca wszystkie kupony.
  2. W Program.cs zastąp // Add the PromotionsContext komentarz następującym kodem:

    builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
    

    Ten kod rejestruje się PromotionsContext w systemie wstrzykiwania zależności.

  3. Zapisz wszystkie zmiany i uruchom aplikację przy użyciu polecenia dotnet run.

Testowanie punktu końcowego

Po dodaniu punktu końcowego przetestuj operacje kuponu:

  1. Przejdź do interfejsu użytkownika struktury Swagger interfejsu API, tak jak w poprzednim ćwiczeniu (lub odśwież istniejący interfejs użytkownika w przeglądarce).

  2. W obszarze nagłówka Kupon rozwiń operację GET i wybierz przycisk Wypróbuj.

  3. Wybierz polecenie Wykonaj. Treść odpowiedzi zawiera kupony z bazy danych:

    [
    {
        "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"
    }
    ]
    

    Zwróć uwagę, że expiration jest to wartość typu data/godzina.

I już! Utworzono i zmodyfikowano szkielet z istniejącej bazy danych.