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

Tamamlandı

Contoso Pizza 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, var olan bir veritabanından yapı iskelesi oluşturacak ve sonuçta elde edilen varlık sınıfını değiştireceksiniz.

Yükseltmeler veritabanını inceleme

yapı iskelesi oluşturulmuş 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.

Promosyon 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ı dizesini kullanarak yapı iskeleleri DbContext ve model sınıfları.
    • Veritabanı sağlayıcısının Microsoft.EntityFrameworkCore.Sqlite kullanılacağını belirtir.
    • Elde edilen DbContext ve model sınıfları için dizinleri belirtir.

    Not

    Bu alıştırmada, bağlantı dizenizin kaynak kodda olduğu uyarısını yoksayabilirsiniz. Gerçek dünya kodunda bağlantı dizelerinizi her zaman güvenli bir konumda depolayın.

  2. Models\Coupon.cs dosyasını açın. Expiration SQLite'in tarih saat veri türü olmadığından özelliği dize olarak tanımlanır. Expiration türünü olarak string?DateTimedeğiştirin. EF Core, datetime verilerinin dize verilerine dönüştürülme işlemini yönetir.

    using System;
    using System.Collections.Generic;
    
    namespace ContosoPizza.Models
    {
        public partial class Coupon
        {
            public long Id { get; set; }
            public string Description { get; set; } = null!;
            public DateTime Expiration { get; set; }
        }
    }
    

    İpucu

    Veritabanı değişirse, yeni yapı iskelesi oluşturulmuş 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. Bundan sonra 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.

    Yukarıdaki kodda:

    • PromotionsContext Oluşturucuya bir nesne eklenir.
    • Get yöntemi tüm kuponları döndürür.
  2. Program.cs dosyasında açıklamasını aşağıdaki kodla değiştirin// Add the PromotionsContext:

    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 etme

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'i 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ğunu expiration unutmayın.

İşte bu kadar! Mevcut bir veritabanından yapı iskelesi oluşturdunuz ve değiştirdiniz!