哈囉大家好!
本來昨天打算先介紹DTO,後來發現在邏輯上應該要先介紹Model和Migration比較順,
所以今天就先來介紹設定資料表時會用到的Model和Migration。
那就馬上開始吧~
在C# MVC(Model-View-Controller)專案中,Model負責的任務是定義資料結構。在Model檔中,Class名稱通常會對應到資料庫中的資料表,property則會和資料表中的欄位相對應。
透過Model, 我們可以把資料表中的每一筆資料當作一個物件(Object),即「物件關聯對應(ORM)」,開發者不需要直接撰寫SQL語法,可以用更簡單的方式對資料表中的內容做新增、修改、編輯和刪除(CRUD)。
那麼來試著建立一個儲存使用者上傳貼文的table Post:
namespace ExampleApp.Models
{
public class Post
{
public int Id { get; set; }
public int UserId { get; set; }
public string? Title { get; set; }
public string? Body { get; set; }
}
}
完成Model欄位對應設定後,為了要告訴EF Core剛剛建立的Post Model要對應到資料庫中的哪個資料表,必須建立一個資料庫上下文(DbContext)。
註:這裡小小科普一下EF Core!
EF Core是一個輕量化、可擴充、開源且跨平台的物件關聯對應程式 (ORM) 框架,是 Entity Framework 資料存取技術的新一代版本,支援各種資料庫,並提供 LINQ 查詢、變更追蹤、架構移轉等功能。(BY 官方)
根據慣例會在根目錄建立一個Data 資料夾,將定義好的DbContext放在裡面:
using Microsoft.EntityFrameworkCore;
using ExampleApp.Models;
namespace ExampleApp.Data
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Post> Posts { get; set; }
}
}
DbSet<Post>
這一段告訴EF Core,有個Model: Post要對應到實際資料庫中的表格:Posts。
定義好Model和DbContext後,必須要建立migration將我們設計好的資料表更新到實際資料庫中。
簡單來說,migration是用來管理資料表架構的工具!
我們可以直接透過指令來建立Migration:
dotnet ef migrations add CreateTablePosts
最後一個字串是migration的名稱,通常命名方式是簡單陳述做了什麼更動(例如:建立Table, 新增欄位...等)
執行指令後便可以看到有一個Migrations資料夾,裡面有一個Migration檔,包含Up()和Down()兩個function。
兩個function代表的是建立table和刪除table,如果想要刪除Migration也可以執行remove指令:
dotnet ef migrations remove CreateTablePosts
到這裡其實還沒有把設定真正更新到資料庫!
需要再執行一個指令,把Migration檔實際應用到資料庫裡
(update後方接的字串是實際要更新的migration名稱):
dotnet ef database update CreateTablePosts
之後就可以到資料庫查看建立好的table啦!
今天簡單介紹了Model和Migration, 明天再來介紹如何透過定義的Model來讀取、操作資料,以及如何利用DTO來優化資料傳輸的過程~