練習 - 從現有的資料庫進行反向工程
Contoso Pizza 的經理要求您新增端點,讓公司可以在其應用程式中顯示優待券。 優待券位於現有的資料庫中。 在此課程單元中,您會從現有的資料庫建立 Scaffolding,並修改產生的實體類別。
檢查促銷資料庫
查看您將用來產生 Scaffold 程式碼的資料庫:
在 [總管] 窗格中,展開 [促銷] 目錄,以滑鼠右鍵按一下 [Promotions.db] 檔案,然後選取 [開啟資料庫]。
新的資料庫會在 [SQLite Explorer] 資料夾中開啟。
在 [SQLite Explorer] 窗格中,展開 [Promotions.db] 和 [優待券] 節點。 記下資料結構描述。
以滑鼠右鍵按一下 [優待券] 節點,然後選取 [顯示資料表]。 檢查優待券資料。
建構促銷內容和優待券模型
現在,您會使用資料庫來建構程式碼:
執行以下命令:
dotnet ef dbcontext scaffold "Data Source=Promotions/Promotions.db" Microsoft.EntityFrameworkCore.Sqlite --context-dir Data --output-dir Models
上述命令會:
- 使用提供的連接字串來建構
DbContext
和模型類別。 - 指定使用
Microsoft.EntityFrameworkCore.Sqlite
資料庫提供者。 - 指定結果
DbContext
和模型類別的目錄。
注意
在此練習中,您可以忽略連接字串在原始程式碼中的警告。 在真實世界程式碼中,始終將您的連接字串儲存在安全的位置。
- 使用提供的連接字串來建構
開啟 Models\Coupon.cs 並檢查建構的 (Scaffolded) 模型。
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; } } }
由於與 C# 相比,SQLite 的類型集有限,因此 Scaffolding 工具會推斷要使用哪些 C# 類型。 例如,
Expiration
資料庫資料行被定義為字串,因為 SQLite 沒有日期資料類型。 Scaffolding 工具根據資料庫中的資料推斷出應該使用的 C# 類型為DateOnly?
。提示
如果資料庫變更,您可以產生新的 Scaffold 檔案。 系統每次都會覆寫產生的檔案,但會建立為
partial
類別,因此您可以使用自己個別檔案中的自訂屬性和行為來加以擴充。
新增優待券端點
您必須先將端點新增至 API,才能測試 Scaffolded 程式碼。 因此,您接下來會新增 API 控制器。
若要進一步了解 API 控制器的運作方式,請參閱使用 ASP.NET Core控制器建立 Web API。
在 [控制器] 資料夾中,新增名為 [CouponController.cs] 的檔案,其中包含下列程式碼:
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(); } }
此程式碼會將
api/coupon
端點新增至 API。在上述程式碼中:
PromotionsContext
物件會插入建構函式。- 方法
Get
會傳回所有優待券。
在 Program.cs 中,使用下列程式碼取代
// Add the PromotionsContext
註解:builder.Services.AddSqlite<PromotionsContext>("Data Source=Promotions/Promotions.db");
此程式碼會使用相依性插入系統註冊
PromotionsContext
。儲存所有變更,並使用
dotnet run
以執行應用程式。
測試端點
現在已新增端點,請測試優待券作業:
請移至 API 的 Swagger UI,就像您在先前的練習中所做的一樣 (或重新整理瀏覽器中的現有 UI)。
在 [優待券] 標題下,展開 [GET] 作業,然後選取 [試用] 按鈕。
選取 [執行]。 回應本文會顯示來自資料庫的優待券:
[ { "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" } ]
請注意,
expiration
是日期時間值。
介紹完畢 您已經從現有資料庫建立 scaffolding 並加以修改!