Cvičení – přidání EF Core do minimálního rozhraní API
Jste vývojář pro společnost a vy a vaše společnost slyšeli o novém minimálním rozhraní API. Váš nadřízený vás požádal, abyste pro něj vytvořili projekt, abyste mohli prodiskutovat, jestli ho chcete použít v dalším projektu.
Poznámka
Tento modul používá rozhraní příkazového řádku .NET (rozhraní příkazového řádku) a Visual Studio Code pro místní vývoj. Po dokončení tohoto modulu můžete použít koncepty pomocí sady Visual Studio (Windows), sady Visual Studio pro Mac (macOS) nebo průběžného vývoje pomocí editoru Visual Studio Code (Windows, Linux, & macOS).
Tento modul používá sadu .NET 8.0 SDK. Spuštěním následujícího příkazu v upřednostňovaném příkazovém terminálu se ujistěte, že máte nainstalované rozhraní .NET 8.0:
dotnet --list-sdks
Zobrazí se výstup podobný následujícímu příkladu:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Ujistěte se, že je uvedená verze, která začíná 8. Pokud žádný není uveden nebo nebyl nalezen příkaz, nainstalujte nejnovější sadu .NET 8.0 SDK.
Nastavení projektu
Nejprve musíte vytvořit projekt. Nainstalovali jste .NET 6 a jste připraveni začít. V této lekci přidáte trvalost dat do rozhraní API pro správu pizzy.
V terminálu vytvořte webové rozhraní API spuštěním
dotnet new:dotnet new web -o PizzaStore -f net8.0Měli byste vidět adresář PizzaStore.
Zadáním následujícího příkazu přejděte do adresáře PizzaStore:
cd PizzaStoreNainstalujte balíček Swashbuckle:
dotnet add package Swashbuckle.AspNetCore --version 6.5.0Otevřete projekt v editoru Visual Studio Code.
Pomocí editoru Visual Studio Code vytvořte v kořenovém adresáři projektu soubor Pizza.cs a dejte mu následující obsah:
namespace PizzaStore.Models { public class Pizza { public int Id { get; set; } public string? Name { get; set; } public string? Description { get; set; } } }Předchozí
Pizzatřída je jednoduchý objekt, který představuje pizzu. Tento kód je vaším datovým modelem. Později použijete Entity Framework (EF) Core k namapování tohoto datového modelu na tabulku databáze.Otevřete Program.cs a přidejte zvýrazněný kód:
using Microsoft.OpenApi.Models; var builder = WebApplication.CreateBuilder(args); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "PizzaStore API", Description = "Making the Pizzas you love", Version = "v1" }); }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "PizzaStore API V1"); }); } app.MapGet("/", () => "Hello World!"); app.Run();Může se zobrazit výzva od Visual Studio Code k přidání asetů pro ladění projektu. V dialogovém okně vyberte
Yes.
Přidání EF Core do projektu
Pokud chcete položky uložit do seznamu to-do, nainstalujte balíček EntityFrameworkCore.InMemory.
Stisknutím Ctrl+' otevřete terminál v editoru Visual Studio Code. V novém terminálu zadejte následující kód, který přidá balíček EF Core InMemory:
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 8.0Na začátek
using Microsoft.EntityFrameworkCore;a Pizza.cs souborů přidejte .Teď, když jste do projektu přidali EF Core, můžete kód připojit k datům, která chcete uložit, a dotazovat se na něj. K tomuto kroku vytvoříte třídu
PizzaDb. TřídaPizzaDbprovede následující úlohy:- Zpřístupněte svou vlastnost
Pizzasz vašeho seznamuPizzav databázi. - K připojení úložiště databáze v paměti použijte
UseInMemoryDatabase. Vaše data se tady ukládají, pokud je aplikace spuštěná.
- Zpřístupněte svou vlastnost
Pokud chcete nastavit databázi v paměti, přidejte následující kód do dolní části souboru Pizza.cs (nad poslední
}). V jmenném prostoruPizzaStore.Modelsbudete mít dvě definice tříd.class PizzaDb : DbContext { public PizzaDb(DbContextOptions options) : base(options) { } public DbSet<Pizza> Pizzas { get; set; } = null!; }DbContextpředstavuje připojení nebo relaci, která se používá k dotazování a ukládání instancí entit v databázi.Na začátek souboru
using PizzaStore.Models;přidejte .Do Program.cspřed voláním
AddSwaggerGenpřidejte následující kód:builder.Services.AddDbContext<PizzaDb>(options => options.UseInMemoryDatabase("items"));
Vrácení seznamu položek
Pokud chcete číst ze seznamu položek v seznamu pizzy, přidejte nad volání
app.Run();trasu "/pizzas":app.MapGet("/pizzas", async (PizzaDb db) => await db.Pizzas.ToListAsync());
Spuštění aplikace
Ujistěte se, že jste uložili všechny změny. Spusťte aplikaci voláním
dotnet runv terminálu. Tato akce sestaví aplikaci a hostuje ji na portu od 5000 do 5300. HTTPS bude mít vybraný port v rozsahu 7000–7300.Poznámka
Pokud chcete přepsat chování náhodného výběru portů, můžete nastavit, aby se porty používaly v launchSettings.json.
dotnet runVýstup může vypadat v terminálu takto:
Building... info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:7200 info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5100 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: /<path>/PizzaStoreV prohlížeči přejděte na https://localhost:{PORT}/swagger. Vyberte tlačítko
GET /pizzasa potom tlačítko Vyzkoušejte a tlačítko Spustit. V částiResponse bodyuvidíte, že seznam je prázdný.V terminálu stisknutím Ctrl+C ukončete spuštění programu.
Vytvoření nových položek
Pojďme přidat do seznamu pizz kód POST pro nové položky. V Program.cspřidejte následující kód pod app.MapGet, který jste vytvořili dříve.
app.MapPost("/pizza", async (PizzaDb db, Pizza pizza) =>
{
await db.Pizzas.AddAsync(pizza);
await db.SaveChangesAsync();
return Results.Created($"/pizza/{pizza.Id}", pizza);
});
Testování rozhraní API
Ujistěte se, že jste uložili všechny změny, a spusťte aplikaci znovu. Vraťte se do uživatelského rozhraní Swaggeru a teď byste měli vidět POST/pizza. Přidání nových položek do seznamu pizzy:
Vyberte POST /pizza.
Vyberte Vyzkoušet.
Text požadavku nahraďte následujícím kódem JSON:
{ "name": "Pepperoni", "description": "A classic pepperoni pizza" }Vyberte Spustit.
Chcete-li přečíst položky v seznamu:
Vyberte GET /pizzas.
Vyberte Vyzkoušet.
Vyberte Spustit.
Response bodybude obsahovat právě přidané položky.[ { "id": 1, "name": "Pepperoni", "description": "A classic pepperoni pizza" } ]Stisknutím kláves Ctrl+C v terminálu aplikaci ukončete. Ve zbývající části tohoto cvičení zastavte a restartujte aplikaci podle potřeby, abyste mohli otestovat změny. Před
dotnet runnezapomeňte uložit všechny změny!
Získejte jednu položku
Chcete-li získat položku podle id, přidejte kód pod trasou app.MapPost, kterou jste vytvořili dříve.
app.MapGet("/pizza/{id}", async (PizzaDb db, int id) => await db.Pizzas.FindAsync(id));
Testování GET pomocí ID
Pokud chcete tuto operaci otestovat, můžete přejít na https://localhost:{PORT}/pizza/1 nebo použít uživatelské rozhraní Swagger. Vzhledem k tomu, že používáte databázi v paměti, nebude pizza, kterou jste vytvořili dříve, uvedená, pokud jste aplikaci restartovali. Proto budete muset operaci POST použít k jeho opětovnému přidání.
Aktualizace položky
Pokud chcete aktualizovat existující položku, přidejte kód pod GET /pizza/{id} trasu, kterou jste vytvořili:
app.MapPut("/pizza/{id}", async (PizzaDb db, Pizza updatepizza, int id) =>
{
var pizza = await db.Pizzas.FindAsync(id);
if (pizza is null) return Results.NotFound();
pizza.Name = updatepizza.Name;
pizza.Description = updatepizza.Description;
await db.SaveChangesAsync();
return Results.NoContent();
});
Test metody PUT
V uživatelském rozhraní Swagger vyberte PUT /pizza/{id}.
Vyberte Vyzkoušet.
Do textového pole ID zadejte 1.
Nakonec aktualizujte
Request body. Vložte následující KÓD JSON a změňtenamenaPineapple.{ "id": 1, "name": "Pineapple" }Vyberte Spustit.
Pokud chcete kód otestovat, posuňte se zpět na GET /pizza/{id}. Pizza teď má název Pineapple.
Odstranění položky
Pokud chcete odstranit existující položku, přidejte kód pod PUT /pizza/{id}, který jste vytvořili dříve:
app.MapDelete("/pizza/{id}", async (PizzaDb db, int id) =>
{
var pizza = await db.Pizzas.FindAsync(id);
if (pizza is null)
{
return Results.NotFound();
}
db.Pizzas.Remove(pizza);
await db.SaveChangesAsync();
return Results.Ok();
});
Testování smazání
Teď zkuste odstranit položku pomocí rozhraní Swagger.
V této lekci jste přidali EF Core do existující minimální aplikace API a použili jste databázi v paměti k ukládání dat. Dále se dozvíte, jak použít skutečnou databázi k ukládání dat, aby se zachovala mezi vypnutími aplikace.