Alıştırma - Mevcut bir veritabanından tersine mühendislik uygulama
Contoso Pizza'nın yöneticisi, şirketin uygulamasında kupon görüntüleyebilmesi için bir uç nokta eklemenizi istedi. Kuponlar mevcut bir veritabanında bulunur. Bu ünitede, mevcut bir veritabanından iskele oluşturacak ve sonuçta elde edilen varlık sınıfını değiştireceksiniz.
Yükseltmeler veritabanını inceleme
İskeleli kodu oluşturmak için kullanacağınız veritabanına göz atın:
Gezgin bölmesinde Yükseltmeler dizinini genişletin, Promotions.db dosyasına sağ tıklayın ve veritabanını aç'ı seçin.
Yeni veritabanı SQLite Gezgini klasöründe açılır.
SQLite Gezgini klasöründe Promotions.db ve Kuponlar düğümlerini genişletin. Veri şemasını not edin.
Kuponlar düğümüne sağ tıklayın ve Tabloyu göster'i seçin. Kupon verilerini inceleyin.
Promosyonlar bağlamını ve kupon modelinin iskelesini oluşturma
Şimdi veritabanını kullanarak kodun iskelesini oluşturacaksınız:
Şu komutu çalıştırın:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
Yukarıdaki komut:
- Sağlanan bağlantı dizesi kullanarak yapı iskeleleri
DbContext
ve model sınıfları. - Veritabanı sağlayıcısının
Microsoft.EntityFrameworkCore.Sqlite
kullanılacağını belirtir. - Sonuç
DbContext
ve model sınıfları için dizinleri belirtir.
Not
Bu alıştırmada, kaynak kodunda bağlantı dizesi hakkındaki uyarıyı yoksayabilirsiniz. Gerçek dünya kodunda, bağlantı dizesi her zaman güvenli bir konumda depolayın.
- Sağlanan bağlantı dizesi kullanarak yapı iskeleleri
Models\Coupon.cs dosyasını açın ve iskelesi oluşturulan modeli inceleyin.
using System; using System.Collections.Generic; namespace ContosoPizza.Models { public partial class Coupon { public int Id { get; set; } public string Description { get; set; } = null!; public DateOnly? Expiration { get; set; } } }
SQLite, C# ile karşılaştırıldığında sınırlı tür kümesine sahip olduğundan, iskele aracı hangi C# türlerinin kullanılacağına ilişkin çıkarımlar yaptı. Örneğin,
Expiration
SQLite'in tarih veri türü olmadığından veritabanı sütunu dize olarak tanımlanmıştır. yapı iskelesi aracı, C# türünün veritabanındaki verileri temel alması gerektiğiniDateOnly?
ortaya çıkarmıştı.İpucu
Veritabanı değişirse, yeni iskeleli dosyalar oluşturabilirsiniz. Oluşturulan dosyaların üzerine her seferinde yazılır, ancak sınıf olarak
partial
oluşturulurlar, böylece bunları kendi dosyalarınızda özel özellikler ve davranışlarla genişletebilirsiniz.
Kupon uç noktası ekleme
yapı iskelesi oluşturulmuş kodu test etmeden önce API'ye bir uç nokta eklemeniz gerekir. Bu nedenle, bir sonraki adımda yeni bir API denetleyicisi ekleyebilirsiniz.
API denetleyicilerinin nasıl çalıştığını daha iyi anlamak için bkz . ASP.NET Core denetleyicileriyle web API'si oluşturma.
Denetleyiciler klasörüne aşağıdaki kodu içeren CouponController.cs adlı bir dosya ekleyin:
using ContosoPizza.Data; using ContosoPizza.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace ContosoPizza.Controllers; [ApiController] [Route("[controller]")] public class CouponController : ControllerBase { PromotionsContext _context; public CouponController(PromotionsContext context) { _context = context; } [HttpGet] public IEnumerable<Coupon> Get() { return _context.Coupons .AsNoTracking() .ToList(); } }
Bu kod API'ye bir
api/coupon
uç nokta ekler.Önceki kodda:
PromotionsContext
Oluşturucuya bir nesne eklenir.Get
yöntemi tüm kuponları döndürür.
Program.cs'da açıklamayı
// Add the PromotionsContext
aşağıdaki kodla değiştirin:builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
Bu kod bağımlılık ekleme sistemine kaydolur
PromotionsContext
.Tüm değişikliklerinizi kaydedin ve kullanarak
dotnet run
uygulamayı çalıştırın.
Uç noktayı test edin
Uç nokta eklendiğine göre kupon işlemlerini test edin:
Önceki bir alıştırmada yaptığınız gibi API'nin Swagger kullanıcı arabirimine gidin (veya tarayıcınızda mevcut kullanıcı arabirimini yenileyin).
Kupon başlığı altında GET işlemini genişletin ve Deneyin düğmesini seçin.
Yürüt'ü seçin. Yanıt gövdesi veritabanındaki kuponları gösterir:
[ { "id": 1, "description": "Buy 1 get 1 free", "expiration": "2025-01-01T00:00:00" }, { "id": 2, "description": "4 large pizzas for $40", "expiration": "2024-06-30T00:00:00" } ]
Bunun bir tarih saat değeri olduğuna
expiration
dikkat edin.
İşte hepsi bu! Mevcut bir veritabanından yapı iskelesi oluşturdunuz ve değiştirdiniz!