iT邦幫忙

0

Day 17|Entity Framework Core 入門:讓 C# 連接 SQLite 資料庫

c#
  • 分享至 

  • xImage
  •  

今日學習目標

  • 理解 EF Core 與 ORM
  • 安裝 SQLite 的 EF Core 套件
  • 建立 TaskFlowDbContext.cs
  • 在 Program.cs 設定資料庫連線
  • 從瀏覽器查詢 SQLite 中的任務

什麼是 Entity Framework Core

Entity Framework Core(簡稱 EF Core)是 Microsoft 提供的 .NET 資料存取框架。它可以讓我們透過 C# 物件操作關聯式資料庫,而不是所有操作都自己寫 SQL。EF Core 會協助產生 SQL,並將查詢結果轉換成 TaskItem 物件。這類將資料庫資料與程式物件對應的技術稱為 ORM(Object-Relational Mapping,物件關聯對應)。

安裝 Entity Framework Core

使用昨日程式碼
安裝套件
安裝 EF Core 10 版本。在終端機輸入:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version "10.0.*"

安裝完成後輸入:

dotnet list package

建立 TaskFlowDbContext.cs

新增 Data 資料夾
在 VS Code 左側檔案總管:

  1. 找到 TaskFlow3.Api。
  2. 按右鍵,選擇「新增資料夾」。
  3. 命名為 Data。
  4. 在 Data 裡新增 TaskFlowDbContext.cs。
    輸入程式碼:
using Microsoft.EntityFrameworkCore;
using TaskFlow3.Api.Models;

namespace TaskFlow3.Api.Data
{
    public class TaskFlowDbContext : DbContext
    {
        public TaskFlowDbContext(
            DbContextOptions<TaskFlowDbContext> options
        ) : base(options)
        {
        }

        public DbSet<TaskItem> Tasks { get; set; }

        protected override void OnModelCreating(
            ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<TaskItem>(entity =>
            {
                entity.ToTable("Tasks");

                entity.HasKey(t => t.Id);

                entity.Property(t => t.Id)
                      .ValueGeneratedOnAdd();

                entity.Property(t => t.Title)
                      .IsRequired();

                entity.Property(t => t.IsCompleted)
                      .IsRequired();
            });
        }
    }
}

在 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\.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();

結果
在終端機輸入dotnet build,再輸入dotnet run
https://ithelp.ithome.com.tw/upload/images/20261021/20184430zmRBzTIKe1.png


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

尚未有邦友留言

立即登入留言