Alıştırma - Mevcut bir veritabanından tersine mühendislik uygulama

Tamamlandı

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:

  1. 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.

  2. SQLite Gezgini klasöründe Promotions.db ve Kuponlar düğümlerini genişletin. Veri şemasını not edin.

  3. 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:

  1. Ş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.

  2. 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ğini DateOnly? 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.

  1. 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.
  2. 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 .

  3. Tüm değişikliklerinizi kaydedin ve kullanarak dotnet runuygulamayı çalıştırın.

Uç noktayı test edin

Uç nokta eklendiğine göre kupon işlemlerini test edin:

  1. Ö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).

  2. Kupon başlığı altında GET işlemini genişletin ve Deneyin düğmesini seçin.

  3. 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!