Ćwiczenie — odwrotny inżynier z istniejącej bazy danych
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:
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 .
W folderze SQLite Explorer rozwiń węzły Promotions.db i Kupony . Zanotuj schemat danych.
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:
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.
- Szkielety
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.
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.
- Obiekt
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.Zapisz wszystkie zmiany i uruchom aplikację przy użyciu polecenia
dotnet run
.
Testowanie punktu końcowego
Po dodaniu punktu końcowego przetestuj operacje kuponu:
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).
W obszarze nagłówka Kupon rozwiń operację GET i wybierz przycisk Wypróbuj.
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.