第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
dotnet ef migrations add InitialCreate
這個命令會生成一個遷移文件,描述
Student
類別的結構,並準備在資料庫中建立相應的資料表。接著,執行以下命令來更新資料庫:
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 等主題。