Gyakorlat – EF Core hozzáadása a minimális API-hoz
Ön egy vállalat fejlesztője, és Ön és a vállalata hallott az új minimális API-ról. A felettese arra kérte, hogy hozzon létre egy projektet, hogy meg tudja beszélni, hogy használja-e a következő projektben.
Jegyzet
Ez a modul a .NET CLI-t (parancssori felületet) és a Visual Studio Code-ot használja a helyi fejlesztéshez. A modul elvégzése után alkalmazhatja a fogalmakat a Visual Studio (Windows), a Mac Visual Studio (macOS) vagy a Visual Studio Code (Windows, Linux, & macOS) használatával történő folyamatos fejlesztéssel.
Ez a modul a .NET 8.0 SDK-t használja. Győződjön meg arról, hogy telepítve van a .NET 8.0, ha az alábbi parancsot futtatja az előnyben részesített parancsterminálban:
dotnet --list-sdks
A következő példához hasonló kimenet jelenik meg:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Győződjön meg arról, hogy egy 8 kezdődő verzió szerepel a listában. Ha egyik sem szerepel a listában, vagy a parancs nem található, telepítse a legújabb .NET 8.0 SDK-t.
A projekt beállítása
Először létre kell hoznia egy projektet. Telepítette a .NET 6-ot, és már indulhat is. Ebben a modulban adattartósságot fog hozzáadni egy pizzarendelési API-hoz.
Egy terminálban hozzon létre egy webes API-t a
dotnet newfuttatásával:dotnet new web -o PizzaStore -f net8.0Látni kellene a PizzaStore könyvtárat.
Lépjen a PizzaStore könyvtárba a következő parancs megadásával:
cd PizzaStoreTelepítse a Swashbuckle csomagot:
dotnet add package Swashbuckle.AspNetCore --version 6.5.0Nyissa meg a projektet a Visual Studio Code-ban.
A Visual Studio Code használatával hozzon létre egy Pizza.cs fájlt a projekt gyökérkönyvtárában, és adja meg a következő tartalmat:
namespace PizzaStore.Models { public class Pizza { public int Id { get; set; } public string? Name { get; set; } public string? Description { get; set; } } }Az előző
Pizzaosztály egy egyszerű objektum, amely egy pizzát jelöl. Ez a kód az ön adatmodellje. Később az Entity Framework (EF) Core használatával leképezheti ezt az adatmodellt egy adatbázistáblára.Nyissa meg Program.cs , és adja hozzá a kiemelt kódot:
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();Előfordulhat, hogy a Visual Studio Code kéri, hogy adjon hozzá eszközöket a projekt hibakereséséhez. Válassza
Yesa párbeszédpanelen.
EF Core hozzáadása a projekthez
Ha az elemeket a to-do listában szeretné tárolni, telepítse a EntityFrameworkCore.InMemory csomagot.
A Visual Studio Code-ban a Ctrl+' billentyűkombináció lenyomásával nyithat meg egy terminált. Az új terminálban adja meg a következő kódot az EF Core InMemory csomag hozzáadásához:
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 8.0Adja hozzá
using Microsoft.EntityFrameworkCore;a Program.cs és Pizza.cs fájlok elejéhez.Most, hogy hozzáadta az EF Core-t a projekthez, lekötheti a kódot a menteni kívánt adatokhoz, és lekérdezheti őket. Ehhez létre kell hoznia egy
PizzaDbosztályt. APizzaDbosztály a következő feladatokat hajtja végre:- Tegye elérhetővé
Pizzastulajdonságát az adatbázisPizzalistájából. - Használja a
UseInMemoryDatabase-t a memóriában lévő adatbázis-tároló bekötésére. Az adatok itt lesznek tárolva, amíg az alkalmazás fut.
- Tegye elérhetővé
A memóriában lévő adatbázis beállításához adja hozzá a következő kódot a Pizza.cs fájl aljára (a végső
}fájl felett). Két osztálydefiníciót fog használni aPizzaStore.Modelsnévtérben.class PizzaDb : DbContext { public PizzaDb(DbContextOptions options) : base(options) { } public DbSet<Pizza> Pizzas { get; set; } = null!; }DbContextegy olyan kapcsolatot vagy munkamenetet jelöl, amely egy adatbázis entitáspéldányainak lekérdezésére és mentésére szolgál.Vegyen fel
using PizzaStore.Models;a Program.cs fájl tetejére.A hívása előtt a
AddSwaggerGen-ben adja hozzá a következő kódot:builder.Services.AddDbContext<PizzaDb>(options => options.UseInMemoryDatabase("items"));
Elemek listájának visszaadása
Ha a pizzalistában szereplő elemek listájából szeretne olvasni, adja hozzá a következő kódot a
app.Run();hívása fölött egy "/pizza" útvonal hozzáadásához:app.MapGet("/pizzas", async (PizzaDb db) => await db.Pizzas.ToListAsync());
Az alkalmazás futtatása
Győződjön meg arról, hogy az összes módosítást mentette. Futtassa az alkalmazást úgy, hogy meghívja
dotnet runa terminálban. Ez a művelet létrehozza az alkalmazást, és egy 5000 és 5300 közötti porton üzemelteti. A HTTPS-hez egy port lesz kiválasztva a 7000-7300 tartományban.Jegyzet
Ha felül szeretné bírálni a véletlenszerű portkijelölési viselkedést, megadhatja a használandó portokat a launchSettings.json-ban.
dotnet runÍgy nézhet ki a kimenet a terminálban:
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>/PizzaStoreA böngészőjében lépjen a https://localhost:{PORT}/swaggeroldalra. Válassza a
GET /pizzasgombot, majd próbálja ki, és hajtsa végre. Láthatja, hogy a lista üres aResponse bodyalatt.A terminálban nyomja le a Ctrl+C billentyűkombinációt a program futtatásának leállításához.
Új elemek létrehozása
Vegyük fel a kódot a pizzák listájára, hogy új elemeket adjunk hozzá POST-hoz. A Program.cs - ben adja hozzá a következő kódot az alább található, korábban létrehozott app.MapGet alatt.
app.MapPost("/pizza", async (PizzaDb db, Pizza pizza) =>
{
await db.Pizzas.AddAsync(pizza);
await db.SaveChangesAsync();
return Results.Created($"/pizza/{pizza.Id}", pizza);
});
Az API tesztelése
Győződjön meg arról, hogy mentette az összes módosítást, és futtassa újra az alkalmazást. Lépjen vissza a Swagger felhasználói felületére, és most látnia kell POST/pizza. Új elemek hozzáadása a pizzalistához:
Válaszd a POST /pizzalehetőséget.
Válassza a Kipróbálás lehetőséget.
Cserélje le a kérelem törzsét a következő JSON-ra:
{ "name": "Pepperoni", "description": "A classic pepperoni pizza" }Válassza a Végrehajtás lehetőséget.
A lista elemeinek olvasása:
Válassza a GET /pizzaslehetőséget.
Válassza a Kipróbálás lehetőséget.
Válassza a Végrehajtás lehetőséget.
A
Response bodyaz imént hozzáadott elemeket is tartalmazni fogja.[ { "id": 1, "name": "Pepperoni", "description": "A classic pepperoni pizza" } ]Az alkalmazás futtatásának leállításához nyomja le a Ctrl+C billentyűkombinációt a terminálban. A gyakorlat hátralévő részében állítsa le és indítsa újra az alkalmazást a módosítások teszteléséhez. Győződjön meg róla, hogy az összes módosítást mentette, mielőtt
dotnet run!
Egyetlen elem lekérése
A id útvonalon keresztül történő elem lekéréséhez adja hozzá a kódot a korábban létrehozott app.MapPost útvonalon.
app.MapGet("/pizza/{id}", async (PizzaDb db, int id) => await db.Pizzas.FindAsync(id));
Azonosító szerinti GET kérés tesztelése
A művelet teszteléséhez nyissa meg a https://localhost:{PORT}/pizza/1, vagy használja a Swagger felhasználói felületét. Mivel memóriabeli adatbázist használ, a korábban létrehozott pizza nem fog szerepelni, ha újraindította az alkalmazást. Ezért a POST művelettel újra hozzá kell adnia.
Elem frissítése
Meglévő elem frissítéséhez adja hozzá a kódot a létrehozott GET /pizza/{id} útvonalon:
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();
});
PUT tesztelése
Válassza a PUT /pizza/{id} lehetőséget a Swagger felhasználói felületén.
Válassza a Kipróbálás lehetőséget.
A azonosító szövegmezőbe írja be 1.
Végül frissítse a(z)
Request body-at. Illessze be a következő JSON-t, és módosítsaname-tPineapple-re.{ "id": 1, "name": "Pineapple" }Válassza a Végrehajtás lehetőséget.
A kód teszteléséhez görgessen vissza a GET /pizza/{id}. A pizzának mostantól a neve Pineapple.
Elem törlése
Meglévő elem törléséhez adja hozzá a korábban létrehozott PUT /pizza/{id} kódot:
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();
});
A DELETE tesztelése
Most próbálja meg törölni az elemet a Swagger felület használatával.
Ebben a leckében hozzáadta az EF Core-t egy meglévő minimális API-alkalmazáshoz, és egy memórián belüli adatbázist használt az adatok tárolásához. Ezután megtudhatja, hogyan tárolhat valós adatbázist az adatok tárolására, hogy azok megmaradjanak az alkalmazásleállítások között.