iT邦幫忙

0

Day 18|EF Core Migration(資料庫遷移)

c#
  • 分享至 

  • xImage
  •  

今日學習目標

  • 理解 Migration 的用途
  • 認識 Migration 與 DbContext 的關係
  • 安裝 EF Core Migration 工具
  • 建立第一個 Migration
  • 讓 EF Core 自動建立 SQLite 資料表
  • 測試資料庫是否成功建立

什麼是 Migration

假設未來想替任務新增「截止日期」。以前,可能需要手動執行 SQL:

ALTER TABLE Tasks
ADD COLUMN DueDate TEXT;

學會 Migration 後,我們可以先修改 C# Model,再建立 Migration,讓 EF Core 幫我們管理資料表結構的變更。

安裝 EF Core Migration 工具

使用昨天的程式碼,在終端機輸入:

dotnet tool install --global dotnet-ef --version "10.0.*"

繼續在終端機輸入:

dotnet tool install --global dotnet-ef --version "10.0.*"

修改 Program.cs 的資料庫名稱

using Microsoft.EntityFrameworkCore;
using TaskFlow3.Api.Data;
using TaskFlow3.Api.Services;
var builder = WebApplication.CreateBuilder(args);

// OpenAPI
builder.Services.AddOpenApi();

// Controller
builder.Services.AddControllers();
builder.Services.AddSingleton<ITaskService, TaskService>();
string dbPath = Path.Combine(
    builder.Environment.ContentRootPath,
    "taskflow-ef.db"
);

builder.Services.AddDbContext<TaskFlowDbContext>(options =>
    options.UseSqlite($"Data Source={dbPath}")
);

var app = builder.Build();

// 開發環境才啟用 OpenAPI 和 Swagger UI
if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();

    app.UseSwaggerUI(options =>
    {
        options.SwaggerEndpoint("/openapi/v1.json", "v1");
    });
}

app.UseHttpsRedirection();

// 啟用 Controller 路由
app.MapControllers();

// 測試路由
app.MapGet("/test", () => "伺服器正常運作!");

app.MapGet("/db-check", async (TaskFlowDbContext db) =>
{
    var tasks = await db.Tasks.ToListAsync();

    return Results.Ok(tasks);
});

app.Run();

建立第一個 Migration

在終端機輸入:

dotnet build

輸入:

dotnet ef migrations add InitialCreate

讓 EF Core 建立資料庫

輸入:

dotnet ef database update

確認資料表是否建立成功

開啟 DB Browser for SQLite。

  1. 點選「開啟資料庫」。
  2. 選擇 TaskFlow3.Api,開啟taskflow-ef.db。
  3. 切換到「資料庫結構」。
  4. 確認出現 Tasks 和 EFMigrationsHistory。
    接著開啟「執行 SQL」,輸入:
INSERT INTO Tasks (Title, IsCompleted)
VALUES ('完成 Day 17 Migration', 0);
SELECT * FROM Tasks;

執行後按「寫入變更」

測試 ASP.NET Core 是否讀得到資料

回到 VS Code 終端機:

dotnet run

結果
https://ithelp.ithome.com.tw/upload/images/20261021/201844303J1Q9PqkpI.png


*提醒邦友,使用第三方服務/API 時,請務必評估資安風險與隱私保護
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言