Latihan - Reverse-engineer dari database yang ada
Manajer Contoso Pizza telah meminta Anda untuk menambahkan titik akhir sehingga perusahaan dapat menampilkan kupon di aplikasinya. Kupon berada di database yang ada. Dalam unit ini, Anda membuat perancah dari database yang ada dan memodifikasi kelas entitas yang dihasilkan.
Memeriksa database promosi
Lihat database yang akan Anda gunakan untuk menghasilkan kode perancah:
Pada panel Explorer , perluas direktori Promosi , klik kanan file Promotions.db , lalu pilih Buka Database.
Database baru terbuka di folder SQLite Explorer .
Di folder SQLite Explorer , perluas simpul Promotions.db dan Kupon . Perhatikan skema data.
Klik kanan node Kupon dan pilih Tampilkan tabel. Periksa data kupon.
Menyusun konteks promosi dan model kupon
Sekarang, Anda menggunakan database untuk membuat perancah kode:
Jalankan perintah berikut:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
Perintah sebelumnya:
- Perancah
DbContext
dan kelas model dengan menggunakan string koneksi yang disediakan. - Menentukan untuk menggunakan
Microsoft.EntityFrameworkCore.Sqlite
penyedia database. - Tentukan direktori untuk
DbContext
dan kelas model yang dihasilkan.
Catatan
Dalam latihan ini, Anda dapat mengabaikan peringatan tentang string koneksi Anda berada dalam kode sumber. Dalam kode dunia nyata, selalu simpan string koneksi Anda di lokasi yang aman.
- Perancah
Buka Models\Coupon.cs. Properti
Expiration
didefinisikan sebagai string karena SQLite tidak memiliki jenis data tanggalwaktu.Expiration
Ubah jenis daristring?
menjadiDateTime
. EF Core mengelola konversi data tanggalwaktu ke data string.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; } } }
Tip
Jika database berubah, Anda dapat membuat file perancah baru. File yang dihasilkan ditimpa setiap kali, tetapi dibuat sebagai
partial
kelas, sehingga Anda dapat memperluasnya dengan properti dan perilaku kustom dalam file terpisah Anda sendiri.
Menambahkan titik akhir kupon
Sebelum dapat menguji kode perancah, Anda perlu menambahkan titik akhir ke API. Selanjutnya, Anda menambahkan pengontrol API baru.
Untuk lebih memahami cara kerja pengontrol API, lihat Membuat API web dengan pengontrol ASP.NET Core.
Di folder Pengontrol , tambahkan file bernama CouponController.cs yang berisi kode berikut:
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(); } }
Kode ini menambahkan
api/coupon
titik akhir ke API.Dalam kode sebelumnya:
- Objek
PromotionsContext
disuntikkan ke konstruktor. - Metode
Get
mengembalikan semua kupon.
- Objek
Di Program.cs, ganti komentar
// Add the PromotionsContext
dengan kode berikut:builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
Kode ini mendaftar
PromotionsContext
dengan sistem injeksi dependensi.Simpan semua perubahan Anda dan jalankan aplikasi dengan menggunakan
dotnet run
.
Menguji titik akhir
Sekarang setelah titik akhir ditambahkan, uji operasi kupon:
Buka antarmuka pengguna Swagger API seperti yang Anda lakukan di latihan sebelumnya (atau refresh UI yang ada di browser Anda).
Di bawah judul Kupon , perluas operasi GET dan pilih Cobalah.
Pilih Jalankan. Isi respons menunjukkan kupon dari database:
[ { "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" } ]
Perhatikan bahwa
expiration
adalah nilai tanggalwaktu.
Selesai! Anda telah membuat dan mengubah perancah dari database yang ada!