Alıştırma - En düşük API'ye EF Core ekleme
Bir şirketin geliştiricisisiniz ve siz ve şirketiniz yeni minimal API'yi duydunuz. Yöneticiniz, bir sonraki projenizde kullanılıp kullanılmayacağını tartışabilmeniz için bunun için bir proje oluşturmanızı istedi.
Dekont
Bu modülde yerel geliştirme için .NET CLI (Komut Satırı Arabirimi) ve Visual Studio Code kullanılır. Bu modülü tamamladıktan sonra Visual Studio (Windows), Mac için Visual Studio (macOS) veya Visual Studio Code (Windows, Linux ve macOS) kullanarak geliştirmeye devam ederek kavramları uygulayabilirsiniz.
Bu modülde .NET 8.0 SDK kullanılır. Tercih ettiğiniz komut terminalinde aşağıdaki komutu çalıştırarak .NET 8.0'ın yüklü olduğundan emin olun:
dotnet --list-sdks
Aşağıdaki örneğe benzer bir çıkış görüntülenir:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
ile 8
başlayan bir sürümün listelendiğinden emin olun. Hiçbiri listelenmiyorsa veya komut bulunamazsa en son .NET 8.0 SDK'sını yükleyin.
Projeyi ayarlama
İlk olarak bir proje oluşturmanız gerekir. .NET 6'yi yüklediniz ve başlamaya hazırsınız. Bu ünitede bir pizza yönetim API'sine veri kalıcılığı ekleyeceksiniz.
Terminalde komutunu çalıştırarak
dotnet new
bir web API'si oluşturun:dotnet new web -o PizzaStore -f net8.0
PizzaStore dizinini görmeniz gerekir.
Aşağıdaki komutu girerek PizzaStore dizinine gidin:
cd PizzaStore
Swashbuckle paketini yükleyin:
dotnet add package Swashbuckle.AspNetCore --version 6.5.0
Projeyi Visual Studio Code'da açın.
Visual Studio Code'u kullanarak proje kökünde bir Pizza.cs dosyası oluşturun ve bu dosyaya aşağıdaki içeriği verin:
namespace PizzaStore.Models { public class Pizza { public int Id { get; set; } public string? Name { get; set; } public string? Description { get; set; } } }
Yukarıdaki
Pizza
sınıf, pizzayı temsil eden basit bir nesnedir. Bu kod, veri modelinizdir. Daha sonra, bu veri modelini bir veritabanı tablosuyla eşlemek için Entity Framework (EF) Core kullanacaksınız.Program.cs dosyasını açın ve vurgulanan kodu ekleyin:
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();
Visual Studio Code'dan projede hata ayıklamak için varlık ekleme istemi alabilirsiniz. İletişim kutusunda öğesini seçin
Yes
.
Projeye EF Core ekleme
Öğeleri yapılacaklar listesinde depolamak için paketi yükleyin EntityFrameworkCore.InMemory
.
Visual Studio Code'da bir terminal açmak için Ctrl+' tuşlarına basın. Yeni terminalde EF Core InMemory paketini eklemek için aşağıdaki kodu girin:
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 8.0
Program.cs ve Pizza.cs dosyalarınızın en üstüne ekleyin
using Microsoft.EntityFrameworkCore;
.Ef Core'un projeye eklendiğine göre, kodunuzu kaydetmek istediğiniz verilere aktarabilir ve sorgulayabilirsiniz. Bu adımı gerçekleştirmek için bir
PizzaDb
sınıf oluşturursunuz.PizzaDb
sınıfı aşağıdaki görevleri gerçekleştirecektir:- Veritabanı listenizden özelliğinizi
Pizzas
Pizza
kullanıma sunun. - Bellek içi veritabanı depolama alanını kabloyla göndermek için kullanın
UseInMemoryDatabase
. Uygulamanız çalıştığı sürece verileriniz burada depolanır.
- Veritabanı listenizden özelliğinizi
Bellek içi veritabanınızı ayarlamak için Pizza.cs dosyasının altına (son
}
dosyanın üstüne) aşağıdaki kodu ekleyin. Ad alanında iki sınıf tanımınaPizzaStore.Models
sahip olursunuz.class PizzaDb : DbContext { public PizzaDb(DbContextOptions options) : base(options) { } public DbSet<Pizza> Pizzas { get; set; } = null!; }
DbContext
, veritabanındaki varlık örneklerini sorgulamak ve kaydetmek için kullanılan bir bağlantıyı veya oturumu temsil eder.Program.cs dosyanızın en üstüne ekleyin
using PizzaStore.Models;
.Program.cs dosyasında, çağrısından
AddSwaggerGen
önce aşağıdaki kodu ekleyin:builder.Services.AddDbContext<PizzaDb>(options => options.UseInMemoryDatabase("items"));
Öğe listesini döndürme
Pizza listesindeki öğeler listesinden okumak için çağrısının üzerine "/pizzas" yolu eklemek için
app.Run();
aşağıdaki kodu ekleyin:app.MapGet("/pizzas", async (PizzaDb db) => await db.Pizzas.ToListAsync());
Uygulamayı çalıştırma
Tüm değişikliklerinizi kaydettiğinizden emin olun. Terminalde arayarak
dotnet run
uygulamayı çalıştırın. Bu eylem uygulamayı oluşturur ve 5000-5300 arası bir bağlantı noktasında barındıracaktır. HTTPS için 7000-7300 aralığında bir bağlantı noktası seçilir.Dekont
Rastgele bağlantı noktası seçimi davranışını geçersiz kılmak istiyorsanız, launch Ayarlar.json dosyasında kullanılacak bağlantı noktalarını ayarlayabilirsiniz.
dotnet run
Çıktının terminalde nasıl görünebileceği aşağıdadır:
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
Tarayıcınızda https://localhost:{PORT}/swagger adresine gidin. Düğmeyi
GET /pizzas
seçin, ardından Deneyin ve Yürüt'e tıklayın. altındaResponse body
listenin boş olduğunu görürsünüz.Terminalde, programı çalıştırmayı durdurmak için Ctrl+C tuşlarına basın.
Yeni öğe oluşturma
Şimdi kodu POST
pizza listesine yeni öğelere ekleyelim. Program.cs'de, daha önce oluşturduğunuz kodun app.MapGet
altına aşağıdaki kodu ekleyin.
app.MapPost("/pizza", async (PizzaDb db, Pizza pizza) =>
{
await db.Pizzas.AddAsync(pizza);
await db.SaveChangesAsync();
return Results.Created($"/pizza/{pizza.Id}", pizza);
});
API’yi test etme
Tüm değişikliklerinizi kaydettiğinizden ve uygulamayı yeniden çalıştırdığınızdan emin olun. Swagger kullanıcı arabirimine geri döndüğünüzde öğesini görmeniz POST/pizza
gerekir. Pizza listesine yeni öğeler eklemek için:
POST /pizza'ı seçin.
Deneyin'i seçin.
İstek gövdesini aşağıdaki JSON ile değiştirin:
{ "name": "Pepperoni", "description": "A classic pepperoni pizza" }
Yürüt'ü seçin.
Listedeki öğeleri okumak için:
GET /pizzas'ı seçin.
Deneyin'i seçin.
Yürüt'ü seçin.
yeni
Response body
eklenen öğeleri içerir.[ { "id": 1, "name": "Pepperoni", "description": "A classic pepperoni pizza" } ]
Uygulamayı çalıştırmayı durdurmak için terminalde Ctrl+C tuşlarına basın. Bu alıştırmanın geri kalanında, değişikliklerinizi test etmek için uygulamayı istediğiniz şekilde durdurun ve yeniden başlatın. Tüm değişikliklerinizi sizden
dotnet run
önce kaydettiğinizden emin olun!
Tek bir öğe alma
öğesine göre id
bir öğeyi ALMAK için, kodu daha önce oluşturduğunuz yolun altına app.MapPost
ekleyin.
app.MapGet("/pizza/{id}", async (PizzaDb db, int id) => await db.Pizzas.FindAsync(id));
Kimliğine göre GET'i test edin
Bu işlemi test etmek için Swagger kullanıcı arabirimine https://localhost:{PORT}/pizza/1 gidebilir veya kullanabilirsiniz. Bellek içi veritabanı kullandığınızdan, uygulamayı yeniden başlattıysanız daha önce oluşturduğunuz pizza listelenmez. Bu nedenle, yeniden eklemek için POST işleminizi kullanmanız gerekir.
Öğeyi güncelleştirme
Mevcut bir öğeyi güncelleştirmek için kodu oluşturduğunuz yolun altına GET /pizza/{id}
ekleyin:
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
Swagger kullanıcı arabiriminde PUT /pizza/{id} öğesini seçin.
Deneyin'i seçin.
Kimlik metin kutusuna 1 girin.
Son olarak güncelleştirin
Request body
. Aşağıdaki JSON dosyasını yapıştırın ve olarakPineapple
değiştirinname
.{ "id": 1, "name": "Pineapple" }
Yürüt'ü seçin.
Kodu test etmek için bölümüne geri GET /pizza/{id}
kaydırın. Pizzanın adı Pineapple
artık .
Öğeyi silme
Var olan bir öğeyi silmek için, daha önce oluşturduğunuz öğenin altına PUT /pizza/{id}
kodu ekleyin:
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'i test etme
Şimdi Swagger arabirimini kullanarak bir öğeyi silmeyi deneyin.
Bu ünitede EF Core'ı mevcut en düşük API uygulamasına eklediniz ve verileri depolamak için bellek içi bir veritabanı kullandınız. Ardından, uygulama kapatma işlemleri arasında kalıcı olması için verileri depolamak için gerçek bir veritabanını nasıl kullanacağınızı öğreneceksiniz.