文章

第16天:資料庫連接(使用 Entity Framework)

課程簡介

今天,我們將學習如何使用 Entity Framework (EF) 與資料庫進行連接與操作。Entity Framework 是一個物件關係映射 (ORM) 工具,它允許您將資料庫中的資料表映射為 C# 的類別,並透過 LINQ 查詢資料庫,而不必直接撰寫 SQL 查詢。我們將介紹如何安裝 Entity Framework、建立資料庫上下文,以及進行基本的 CRUD(Create, Read, Update, Delete)操作。


學習目標

  • 瞭解 Entity Framework 的基本概念和用途
  • 學習如何安裝和配置 Entity Framework Core
  • 掌握如何使用 Entity Framework 進行資料庫的基本 CRUD 操作
  • 了解如何使用 LINQ 與資料庫進行互動

課程內容

1. Entity Framework 基本概念

Entity Framework Core 是 .NET 的一個跨平台 ORM 框架,它將資料庫的資料表轉換為 C# 類別,並使您能夠使用 LINQ 語法來進行查詢。EF Core 讓開發者可以以物件導向的方式來操作資料庫,大幅減少手動編寫 SQL 的需求。


2. 安裝 Entity Framework Core

在建立專案後,首先需要安裝 Entity Framework Core 的 NuGet 套件。開啟您的專案,並執行以下命令:

1
2
3
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
  • Microsoft.EntityFrameworkCore:核心套件,提供基本的 ORM 功能。
  • Microsoft.EntityFrameworkCore.SqlServer:適用於 SQL Server 的提供者。
  • Microsoft.EntityFrameworkCore.Tools:提供設計時的工具,例如資料庫遷移。

3. 建立資料模型

使用 Entity Framework Core 時,首先需要定義資料模型。假設我們想要建立一個儲存「學生」資訊的應用程式,可以建立一個 Student 類別來代表資料表。

範例:

1
2
3
4
5
6
7
8
9
using System;

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime EnrollmentDate { get; set; }
}

Student 類別中的屬性將對應到資料表的欄位,Id 屬性會被視為主鍵。


4. 建立資料庫上下文(DbContext)

DbContext 是 Entity Framework 的核心類別,它允許我們在應用程式中操作資料庫。接下來,建立一個繼承自 DbContext 的類別,例如 SchoolContext

1
2
3
4
5
6
7
8
9
10
11
using Microsoft.EntityFrameworkCore;

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=YOUR_SERVER_NAME;Database=SchoolDB;Trusted_Connection=True;");
    }
}
  • DbSet<Student>:代表資料表「Students」,可以透過它對學生資料表進行查詢和操作。
  • OnConfiguring 方法:用來配置資料庫連接字串。請將 YOUR_SERVER_NAME 替換為您的 SQL Server 名稱。

5. 建立資料庫與遷移

使用 Entity Framework Core,可以利用「遷移」功能來建立或更新資料庫結構。遷移是一組指令,可以追蹤資料庫結構變更並將這些變更套用到實際的資料庫中。

步驟:

  1. 在專案目錄下執行以下命令來建立初始遷移:

    1
    
    dotnet ef migrations add InitialCreate
    

    這個命令會生成一個遷移文件,描述 Student 類別的結構,並準備在資料庫中建立相應的資料表。

  2. 接著,執行以下命令來更新資料庫:

    1
    
    dotnet ef database update
    

    這個命令會將初始遷移套用到資料庫中,並建立 SchoolDB 資料庫及 Students 資料表。


6. 基本 CRUD 操作

一旦資料庫和模型配置完成,就可以使用 Entity Framework Core 進行 CRUD 操作。

a. 新增資料(Create)

1
2
3
4
5
6
7
8
9
10
11
using (var context = new SchoolContext())
{
    var student = new Student
    {
        Name = "Alice",
        Age = 20,
        EnrollmentDate = DateTime.Now
    };
    context.Students.Add(student);
    context.SaveChanges();
}

此範例中,我們建立了一個新的 Student 實例,並將其加入到 Students 資料集中。最後,使用 SaveChanges() 方法將變更儲存到資料庫。


b. 讀取資料(Read)

1
2
3
4
5
6
7
8
using (var context = new SchoolContext())
{
    var students = context.Students.ToList();
    foreach (var student in students)
    {
        Console.WriteLine($"{student.Name} - {student.Age}");
    }
}

此範例中,我們使用 ToList() 方法將 Students 資料表中的所有記錄讀取到清單中,然後使用 foreach 迴圈輸出每個學生的姓名和年齡。


c. 更新資料(Update)

1
2
3
4
5
6
7
8
9
using (var context = new SchoolContext())
{
    var student = context.Students.FirstOrDefault(s => s.Name == "Alice");
    if (student != null)
    {
        student.Age = 21;
        context.SaveChanges();
    }
}

此範例中,我們先使用 FirstOrDefault 查詢出一個名為 “Alice” 的學生,然後修改其年齡,再次使用 SaveChanges() 方法將變更儲存到資料庫。


d. 刪除資料(Delete)

1
2
3
4
5
6
7
8
9
using (var context = new SchoolContext())
{
    var student = context.Students.FirstOrDefault(s => s.Name == "Alice");
    if (student != null)
    {
        context.Students.Remove(student);
        context.SaveChanges();
    }
}

此範例中,我們查詢出一個名為 “Alice” 的學生,並使用 Remove 方法將其從資料集中刪除,然後使用 SaveChanges() 將刪除操作保存到資料庫。


7. 使用 LINQ 查詢資料

Entity Framework 支援 LINQ 語法,可以讓我們以簡單且直觀的方式來查詢資料。

範例:查詢年齡大於 18 的學生

1
2
3
4
5
6
7
8
9
10
11
12
using (var context = new SchoolContext())
{
    var adultStudents = context.Students
                               .Where(s => s.Age > 18)
                               .OrderBy(s => s.Name)
                               .ToList();

    foreach (var student in adultStudents)
    {
        Console.WriteLine($"{student.Name} - {student.Age}");
    }
}

在此範例中,我們使用 Where 篩選出年齡大於 18 歲的學生,並按姓名排序結果。


教學重點

  • 瞭解如何安裝與配置 Entity Framework Core。
  • 使用 DbContext 和資料模型與資料庫進行互動。
  • 掌握基本的 CRUD 操作。
  • 使用 LINQ 語法進行資料查詢。

在下一節課程中,我們將進一步學習 進階資料庫操作,如多對多關係、Eager Loading、Lazy Loading 等主題。

本文章以 CC BY 4.0 授權