Cvičení – zpětná analýza z existující databáze
Manažer společnosti Contoso Pizza vás požádal o přidání koncového bodu, aby společnost ve své aplikaci zobrazovala kupóny. Kupóny se nacházejí v existující databázi. V této lekci vytvoříte generování uživatelského rozhraní z existující databáze a upravíte výslednou třídu entity.
Kontrola databáze propagačních akcí
Podívejte se na databázi, kterou použijete k vygenerování vygenerovaného kódu:
V podokně Průzkumník rozbalte adresář Promotions , klikněte pravým tlačítkem na soubor Promotions.db a pak vyberte Otevřít databázi.
Nová databáze se otevře ve složce SQLite Explorer .
Ve složce SQLite Explorer rozbalte uzly Promotions.db a Coupons . Poznamenejte si schéma dat.
Klikněte pravým tlačítkem na uzel Kupóny a vyberte Zobrazit tabulku. Zkontrolujte data kupónů.
Generování kontextu propagačních akcí a kuponového modelu
Teď pomocí databáze vygenerujete kód:
Spusťte následující příkaz:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
Předchozí příkaz:
- Generování uživatelského rozhraní
DbContext
a třídy modelů pomocí zadaného připojovacího řetězce - Určuje, že se má použít
Microsoft.EntityFrameworkCore.Sqlite
poskytovatel databáze. - Určuje adresáře pro výsledné
DbContext
třídy a třídy modelu.
Poznámka
V tomto cvičení můžete upozornění na připojovací řetězec ve zdrojovém kódu ignorovat. V reálném kódu vždy ukládejte připojovací řetězce na bezpečném místě.
- Generování uživatelského rozhraní
Otevřete Models\Coupon.cs. Vlastnost
Expiration
je definovaná jako řetězec, protože SQLite nemá datový typ datetime.Expiration
Změňte typ zstring?
naDateTime
. EF Core spravuje převod dat datetime na řetězcová data.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; } } }
Tip
Pokud se databáze změní, můžete vygenerovat nové vygenerované soubory. Vygenerované soubory jsou pokaždé přepsány, ale jsou vytvořeny jako
partial
třídy, takže je můžete rozšířit o vlastní vlastnosti a chování ve vlastních samostatných souborech.
Přidání koncového bodu kupónu
Než budete moct vygenerovaný kód otestovat, musíte do rozhraní API přidat koncový bod. V dalším kroku tedy přidáte nový kontroler rozhraní API.
Pokud chcete lépe pochopit, jak kontrolery rozhraní API fungují, přečtěte si téma Vytvoření webového rozhraní API s ASP.NET Core kontrolery.
Do složky Controllers přidejte soubor s názvem CouponController.cs , který obsahuje následující kód:
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(); } }
Tento kód přidá
api/coupon
koncový bod do rozhraní API.V předchozím kódu:
- Objekt
PromotionsContext
je vložen do konstruktoru. - Metoda
Get
vrátí všechny kupóny.
- Objekt
V souboru Program.cs nahraďte
// Add the PromotionsContext
komentář následujícím kódem:builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
Tento kód se registruje
PromotionsContext
v systému injektáže závislostí.Uložte všechny změny a spusťte aplikaci pomocí
dotnet run
příkazu .
Testování koncového bodu
Teď, když je koncový bod přidaný, otestujte operace kupónů:
Přejděte do uživatelského rozhraní Swaggeru rozhraní API, jako jste to udělali v předchozím cvičení (nebo aktualizujte stávající uživatelské rozhraní v prohlížeči).
Pod nadpisem Kupón rozbalte operaci GET a vyberte Vyzkoušet.
Vyberte Execute (Provést). V textu odpovědi se zobrazí kupóny z databáze:
[ { "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" } ]
Všimněte si, že
expiration
je hodnota datetime.
A to je vše! Vytvořili jste a upravili generování uživatelského rozhraní z existující databáze.