Oefening: EF Core toevoegen aan minimale API
U bent een ontwikkelaar voor een bedrijf en u en uw bedrijf hebben gehoord over de nieuwe minimale API. Uw manager heeft u gevraagd een project voor het project te maken, zodat u kunt bespreken of u het wilt gebruiken voor uw volgende project.
Notitie
Deze module maakt gebruik van de .NET CLI (Opdrachtregelinterface) en Visual Studio Code voor lokale ontwikkeling. Nadat u deze module hebt voltooid, kunt u de concepten toepassen met behulp van Visual Studio (Windows), Visual Studio voor Mac (macOS) of continue ontwikkeling met behulp van Visual Studio Code (Windows, Linux en macOS).
In deze module wordt de .NET 8.0 SDK gebruikt. Zorg ervoor dat .NET 8.0 is geïnstalleerd door de volgende opdracht uit te voeren in de opdrachtterminal van uw voorkeur:
dotnet --list-sdks
Uitvoer die vergelijkbaar is met het volgende voorbeeld wordt weergegeven:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Zorg ervoor dat er een versie wordt vermeld die begint met 8
. Als er geen wordt vermeld of de opdracht niet wordt gevonden, installeert u de meest recente .NET 8.0 SDK.
Het project instellen
Eerst moet u een project maken. U hebt .NET 6 geïnstalleerd en u kunt aan de slag. In deze les voegt u gegevenspersistentie toe aan een pizzabeheer-API.
Maak in een terminal een web-API door het volgende uit te voeren
dotnet new
:dotnet new web -o PizzaStore -f net8.0
U ziet nu de map PizzaStore .
Ga naar de map PizzaStore door de volgende opdracht in te voeren:
cd PizzaStore
Installeer het Swashbuckle-pakket:
dotnet add package Swashbuckle.AspNetCore --version 6.5.0
Open het project in Visual Studio Code.
Maak met Visual Studio Code een Pizza.cs-bestand in de hoofdmap van het project en geef het de volgende inhoud:
namespace PizzaStore.Models { public class Pizza { public int Id { get; set; } public string? Name { get; set; } public string? Description { get; set; } } }
De voorgaande
Pizza
klasse is een eenvoudig object dat een pizza vertegenwoordigt. Deze code is uw gegevensmodel. Later gebruikt u Entity Framework (EF) Core om dit gegevensmodel toe te wijzen aan een databasetabel.Open Program.cs en voeg de gemarkeerde code toe:
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(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "PizzaStore API V1"); }); app.MapGet("/", () => "Hello World!"); app.Run();
Mogelijk ontvangt u een prompt van Visual Studio Code om assets toe te voegen om fouten in het project op te sporen. Selecteer
Yes
in het dialoogvenster.
EF Core toevoegen aan het project
Als u de items in de takenlijst wilt opslaan, installeert u het EntityFrameworkCore.InMemory
pakket.
Druk op Ctrl+' om een terminal te openen in Visual Studio Code. Voer in de nieuwe terminal de volgende code in om het EF Core InMemory-pakket toe te voegen:
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 8.0
Voeg
using Microsoft.EntityFrameworkCore;
toe aan het begin van uw Program.cs - en Pizza.cs-bestanden .Nu u EF Core aan het project hebt toegevoegd, kunt u uw code koppelen aan de gegevens die u wilt opslaan en er query's op uitvoeren. Als u deze stap wilt uitvoeren, maakt u een
PizzaDb
klasse. DePizzaDb
klasse voert de volgende taken uit:Pizzas
Uw eigenschap beschikbaar maken in uw lijstPizza
met gegevens in de database.- Gebruik
UseInMemoryDatabase
deze functie om de opslag van de in-memory database te verbinden. Uw gegevens worden hier opgeslagen zolang de app wordt uitgevoerd.
Als u uw in-memory database wilt instellen, voegt u de volgende code toe aan de onderkant van het Bestand Pizza.cs (boven de laatste
}
). U hebt twee klassedefinities in dePizzaStore.Models
naamruimte.class PizzaDb : DbContext { public PizzaDb(DbContextOptions options) : base(options) { } public DbSet<Pizza> Pizzas { get; set; } = null!; }
DbContext
vertegenwoordigt een verbinding of sessie die wordt gebruikt om exemplaren van entiteiten in een database op te vragen en op te slaan.Voeg
using PizzaStore.Models;
toe aan het begin van het bestand Program.cs .Voeg in Program.cs, vóór de aanroep naar
AddSwaggerGen
, de volgende code toe:builder.Services.AddDbContext<PizzaDb>(options => options.UseInMemoryDatabase("items"));
Een lijst met items retourneren
Als u wilt lezen uit een lijst met items in de pizzalijst, voegt u de volgende code toe boven de aanroep om een route '/pizza's' toe te
app.Run();
voegen:app.MapGet("/pizzas", async (PizzaDb db) => await db.Pizzas.ToListAsync());
De toepassing uitvoeren
Zorg ervoor dat u al uw wijzigingen hebt opgeslagen. Voer de app uit door in de terminal aan te roepen
dotnet run
. Met deze actie wordt de app gebouwd en gehost op een poort van 5000-5300. HTTPS heeft een poort geselecteerd in het bereik 7000-7300.Notitie
Als u het gedrag van selectie van willekeurige poorten wilt overschrijven, kunt u instellen dat de poorten worden gebruikt in launch Instellingen.json.
dotnet run
Hier ziet u hoe de uitvoer eruit kan zien in de terminal:
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>/PizzaStore
Ga in uw browser naar https://localhost:{PORT}/swagger. Selecteer de
GET /pizzas
knop, gevolgd door Uitproberen en Uitvoeren. U ziet dat de lijst leeg is onderResponse body
.Druk in de terminal op Ctrl+C om het programma niet meer uit te voeren.
Nieuwe items maken
Laten we de code toevoegen aan POST
nieuwe items aan de lijst met pizza's. Voeg in Program.cs de volgende code toe onder de app.MapGet
code die u eerder hebt gemaakt.
app.MapPost("/pizza", async (PizzaDb db, Pizza pizza) =>
{
await db.Pizzas.AddAsync(pizza);
await db.SaveChangesAsync();
return Results.Created($"/pizza/{pizza.Id}", pizza);
});
De API testen
Zorg ervoor dat u al uw wijzigingen hebt opgeslagen en voer de app opnieuw uit. Ga terug naar de Swagger-gebruikersinterface en nu zou u moeten zien POST/pizza
. Nieuwe items toevoegen aan de pizzalijst:
Selecteer POST /pizza.
Selecteer Uitproberen.
Vervang de aanvraagbody door de volgende JSON:
{ "name": "Pepperoni", "description": "A classic pepperoni pizza" }
Selecteer Uitvoeren.
De items in de lijst lezen:
Selecteer GET /pizza's.
Selecteer Uitproberen.
Selecteer Uitvoeren.
De
Response body
items worden zojuist toegevoegd.[ { "id": 1, "name": "Pepperoni", "description": "A classic pepperoni pizza" } ]
Druk op Ctrl+C in de terminal om te stoppen met het uitvoeren van de app. Voor de rest van deze oefening stopt en start u de app opnieuw zoals u wilt om uw wijzigingen te testen. Zorg ervoor dat u al uw wijzigingen opslaat voordat u
dotnet run
!
Eén item ophalen
Als u een item wilt id
ophalen, voegt u de code toe onder de app.MapPost
route die u eerder hebt gemaakt.
app.MapGet("/pizza/{id}", async (PizzaDb db, int id) => await db.Pizzas.FindAsync(id));
GET testen op id
Als u deze bewerking wilt testen, gaat u naar https://localhost:{PORT}/pizza/1 of gebruikt u de Swagger-gebruikersinterface. Omdat u een in-memory database gebruikt, wordt de pizza die u eerder hebt gemaakt, niet weergegeven als u de toepassing opnieuw hebt opgestart. U moet de POST-bewerking dus gebruiken om deze opnieuw toe te voegen.
Een item bijwerken
Als u een bestaand item wilt bijwerken, voegt u de code toe onder de GET /pizza/{id}
route die u hebt gemaakt:
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 PUT
Selecteer PUT /pizza/{id} in de Swagger UI.
Selecteer Uitproberen.
Voer in het tekstvak id 1 in.
Request body
Werk ten slotte bij. Plak de volgende JSON en ga naarname
Pineapple
.{ "id": 1, "name": "Pineapple" }
Selecteer Uitvoeren.
Als u de code wilt testen, schuift u terug naar GET /pizza/{id}
. De pizza heeft nu de naam Pineapple
.
Een item verwijderen
Als u een bestaand item wilt verwijderen, voegt u de code toe waaronder PUT /pizza/{id}
u eerder hebt gemaakt:
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();
});
DELETE testen
Probeer nu een item te verwijderen met behulp van de Swagger-interface.
In deze les hebt u EF Core toegevoegd aan een bestaande minimale API-toepassing en een in-memory database gebruikt om de gegevens op te slaan. Vervolgens leert u hoe u een echte database gebruikt om de gegevens op te slaan, zodat deze zich tussen afsluiten van toepassingen blijft voordoen.
Hulp nodig? Raadpleeg onze gids voor probleemoplossing of geef specifieke feedback door een probleem te melden.