Øvelse – Føj EF Core til minimal API
Du er udvikler for en virksomhed, og du og din virksomhed har hørt om den nye minimale API. Din chef har bedt dig om at oprette et projekt til det, så du kan diskutere, om du vil bruge det på dit næste projekt.
Seddel
I dette modul bruges kommandolinjegrænsefladen .NET (Kommandolinjegrænseflade) og Visual Studio Code til lokal udvikling. Når du har fuldført dette modul, kan du anvende begreberne ved hjælp af Visual Studio (Windows), Visual Studio til Mac (macOS) eller fortsat udvikling ved hjælp af Visual Studio Code (Windows, Linux, & macOS).
Dette modul bruger .NET 8.0 SDK. Kontrollér, at .NET 8.0 er installeret ved at køre følgende kommando i din foretrukne kommandoterminal:
dotnet --list-sdks
Output, der ligner følgende eksempel, vises:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Kontrollér, at der er angivet en version, der starter med 8. Hvis der ikke er angivet nogen, eller kommandoen ikke findes, installere det nyeste .NET 8.0 SDK.
Konfigurer projektet
Først skal du oprette et projekt. Du har installeret .NET 6, og du er klar til at gå i brug. I dette undermodul skal du føje data vedholdenhed til en API til administration af pizzaer.
Opret en web-API i en terminal ved at køre
dotnet new:dotnet new web -o PizzaStore -f net8.0Du bør se PizzaStore mappe.
Gå til mappen PizzaStore ved at angive følgende kommando:
cd PizzaStoreInstallér Swashbuckle-pakken:
dotnet add package Swashbuckle.AspNetCore --version 6.5.0Åbn projektet i Visual Studio Code.
Ved hjælp af Visual Studio Code skal du oprette en Pizza.cs fil i projektroden og give den følgende indhold:
namespace PizzaStore.Models { public class Pizza { public int Id { get; set; } public string? Name { get; set; } public string? Description { get; set; } } }Den foregående
Pizzaklasse er et simpelt objekt, der repræsenterer en pizza. Denne kode er din datamodel. Senere skal du bruge Entity Framework (EF) Core til at knytte denne datamodel til en databasetabel.Åbn Program.cs, og tilføj den fremhævede kode:
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();Du modtager muligvis en prompt fra Visual Studio Code for at tilføje aktiver for at foretage fejlfinding af projektet. Vælg
Yesi dialogboksen.
Føj EF Core til projektet
Hvis du vil gemme elementerne på listen over to-do, skal du installere EntityFrameworkCore.InMemory-pakken.
Tryk på Ctrl+' for at åbne en terminal i Visual Studio Code. I den nye terminal skal du angive følgende kode for at tilføje EF Core InMemory-pakken:
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 8.0Føj
using Microsoft.EntityFrameworkCore;til toppen af dine Program.cs- og Pizza.cs-filer.Nu, hvor DU har føjet EF Core til projektet, kan du føje din kode til de data, du vil gemme, og sende en forespørgsel til den. Hvis du vil udføre dette trin, skal du oprette en
PizzaDbklasse. KlassenPizzaDbudfører følgende opgaver:- Vis egenskaben
Pizzasfra listen overPizzai databasen. - Brug
UseInMemoryDatabasetil at oprette forbindelse til databaselageret i hukommelsen. Dine data gemmes her, så længe appen kører.
- Vis egenskaben
Hvis du vil konfigurere databasen i hukommelsen, skal du tilføje følgende kode nederst i Pizza.cs-filen (over den endelige
}). Du har to klassedefinitioner i navneområdetPizzaStore.Models.class PizzaDb : DbContext { public PizzaDb(DbContextOptions options) : base(options) { } public DbSet<Pizza> Pizzas { get; set; } = null!; }DbContextrepræsenterer en forbindelse eller session, der bruges til at forespørge på og gemme forekomster af objekter i en database.Føj
using PizzaStore.Models;til toppen af filen med Program.cs.Tilføj følgende kode i Program.csfør kaldet til
AddSwaggerGen:builder.Services.AddDbContext<PizzaDb>(options => options.UseInMemoryDatabase("items"));
Returner en liste over elementer
Hvis du vil læse fra en liste over elementer på pizzalisten, skal du tilføje følgende kode over kaldet for at
app.Run();for at tilføje en "/pizzas"-rute:app.MapGet("/pizzas", async (PizzaDb db) => await db.Pizzas.ToListAsync());
Kør programmet
Sørg for, at du har gemt alle dine ændringer. Kør appen ved at kalde
dotnet runi terminalen. Denne handling opretter appen og hoster den på en port fra 5000-5300. HTTPS har valgt en port for den i intervallet 7000-7300.Seddel
Hvis du vil tilsidesætte funktionsmåden for valg af tilfældige porte, kan du angive de porte, der skal bruges i launchSettings.json.
dotnet runSådan kan outputtet se ud i terminalen:
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>/PizzaStoreGå til https://localhost:{PORT}/swaggeri browseren. Vælg knappen
GET /pizzasefterfulgt af Prøv, og Udfør. Du kan se, at listen er tom underResponse body.Tryk på Ctrl+C i terminalen for at stoppe kørslen af programmet.
Opret nye elementer
Lad os føje koden til POST nye elementer på pizzalisten. I Program.csskal du tilføje følgende kode under den app.MapGet, du oprettede tidligere.
app.MapPost("/pizza", async (PizzaDb db, Pizza pizza) =>
{
await db.Pizzas.AddAsync(pizza);
await db.SaveChangesAsync();
return Results.Created($"/pizza/{pizza.Id}", pizza);
});
Test API'en
Sørg for, at du har gemt alle dine ændringer, og kør appen igen. Gå tilbage til Swagger-brugergrænsefladen, og nu kan du se POST/pizza. Sådan føjer du nye elementer til pizzalisten:
Vælg POST/pizza.
Vælg Prøv det.
Erstat anmodningens brødtekst med følgende JSON:
{ "name": "Pepperoni", "description": "A classic pepperoni pizza" }Vælg Udfør.
Sådan læser du elementerne på listen:
Vælg GET/pizzaer.
Vælg Prøv det.
Vælg Udfør.
Den
Response bodyindeholder de elementer, der lige er tilføjet.[ { "id": 1, "name": "Pepperoni", "description": "A classic pepperoni pizza" } ]Tryk på Ctrl+C i terminalen for at stoppe med at køre appen. I resten af denne øvelse skal du stoppe og genstarte appen efter behov for at teste dine ændringer. Sørg for at gemme alle dine ændringer, før du
dotnet run!
Hent et enkelt element
Hvis du vil hente et element efter id, skal du tilføje koden under den app.MapPost rute, du oprettede tidligere.
app.MapGet("/pizza/{id}", async (PizzaDb db, int id) => await db.Pizzas.FindAsync(id));
Test GET by ID
Hvis du vil teste denne handling, kan du enten gå til https://localhost:{PORT}/pizza/1 eller bruge brugergrænsefladen Swagger. Da du bruger en database i hukommelsen, vises den pizza, du tidligere har oprettet, ikke, hvis du har genstartet programmet. Så du skal bruge din POST-handling for at tilføje den igen.
Opdater et element
Hvis du vil opdatere et eksisterende element, skal du tilføje koden under den GET /pizza/{id} rute, du har oprettet:
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
Vælg PUT /pizza/{id} i brugergrænsefladen i Swagger.
Vælg Prøv det.
I tekstfeltet id skal du skrive 1.
Til sidst skal du opdatere
Request body. Indsæt følgende JSON, og skiftnametilPineapple.{ "id": 1, "name": "Pineapple" }Vælg Udfør.
Hvis du vil teste koden, skal du rulle tilbage til GET /pizza/{id}. Pizzaen har nu navnet Pineapple.
Slet et element
Hvis du vil slette et eksisterende element, skal du tilføje koden under PUT /pizza/{id}, du oprettede tidligere:
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();
});
Tester DELETE
Prøv nu at slette et element ved hjælp af Swagger-grænsefladen.
I dette undermodul har du føjet EF Core til et eksisterende minimalt API-program og brugt en database i hukommelsen til at gemme dataene. Derefter lærer du, hvordan du bruger en rigtig database til at gemme dataene, så de bevares mellem programlukninger.