iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
佛心分享-SideProject30

30天的旅程!從學習C#到開發小專案系列 第 9

DAY 9 - 使用 Model 定義資料結構與 Migration 編輯資料庫

  • 分享至 

  • xImage
  •  

哈囉大家好!
本來昨天打算先介紹DTO,後來發現在邏輯上應該要先介紹Model和Migration比較順,
所以今天就先來介紹設定資料表時會用到的Model和Migration。
那就馬上開始吧~


1. 建立Post Model:

在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; }
    }
}

2. 設定資料庫上下文: DbContext

完成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。

3. 執行migration

定義好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啦!

重點總結:

  1. 透過程式碼定義資料表的資料結構(Model), 將結構同步更新至database(Migration)
  2. 透過指令建立、刪除Migration, 以及將Migration實際應用到資料庫

今天簡單介紹了Model和Migration, 明天再來介紹如何透過定義的Model來讀取、操作資料,以及如何利用DTO來優化資料傳輸的過程~


上一篇
DAY 8 - 用Controller發送POST request
系列文
30天的旅程!從學習C#到開發小專案9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言