Entity Framework (EF) 是微軟提供的物件關聯對映 (ORM) 框架,讓開發者能以物件導向方式操作資料庫,大幅減少撰寫 ADO.NET 程式碼的負擔。本文將以 ASP.NET MVC 專案為例,示範如何使用 EF 建立模型類、執行 CRUD 操作,並說明 LINQ 查詢的兩種寫法差異。
MoviesDB.edmxMovies),模型命名空間設為 MovieEntityApp.Models完成後,EF 會自動產生 MoviesDBEntities 內容類別與 Movie 實體類別。
using System.Linq;
using System.Web.Mvc;
using MovieEntityApp.Models;
namespace MovieEntityApp.Controllers
{
[HandleError]
public class HomeController : Controller
{
private readonly MoviesDBEntities _db = new MoviesDBEntities();
public ActionResult Index()
{
// 方法語法
ViewData.Model = _db.MovieSet.ToList();
// 查詢語法(等效)
// ViewData.Model = (from m in _db.MovieSet select m).ToList();
return View();
}
}
}
MoviesDBEntities,代表資料庫連線內容。using MovieEntityApp.Models; 才能存取實體類別。IQueryable<Movie> 具體化為 List<Movie>,觸發實際 SQL 查詢。兩種寫法編譯後產生相同的 SQL,純粹是風格偏好:
| 語法類型 | 範例 | 適用情境 |
|---|---|---|
| 方法語法 (Method Syntax) | _db.MovieSet.Where(m => m.Year > 2010).OrderBy(m => m.Title).ToList() | 鏈式呼叫、動態建構查詢 |
| 查詢語法 (Query Syntax) | from m in _db.MovieSet where m.Year > 2010 orderby m.Title select m | 複雜聯結、分組、let 子句 |
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<List<MovieEntityApp.Models.Movie>>" %>
<!DOCTYPE html>
<html>
<head><title>電影列表</title></head>
<body>
<table>
<tr><th>標題</th><th>年份</th><th>操作</th></tr>
<% foreach (var movie in Model) { %>
<tr>
<td><%: movie.Title %></td>
<td><%: movie.Year %></td>
<td><%: Html.ActionLink("編輯", "Edit", new { id = movie.Id }) %></td>
</tr>
<% } %>
</table>
</body>
</html>
EF 產生的 Movie.Designer.cs 屬自動產生代碼,**切勿直接修改**。若需新增驗證邏輯或計算屬性,請建立同名 Partial Class:
// MovieExtensions.cs
namespace MovieEntityApp.Models
{
public partial class Movie
{
public bool IsClassic => Year < 1990;
public string DisplayTitle => $"{Title} ({Year})";
}
}
.Include() 預先載入。Web.config 中 connectionStrings 區段正確指向目標資料庫。Entity Framework 配合 ASP.NET MVC 能快速建立資料驅動的 Web 應用程式。掌握模型建立、LINQ 查詢兩種語法、強型別 View 以及 Partial Class 擴充技巧,即可應付大多數中小型專案的資料存取需求。後續可進一步學習 Code First、Migration、非同步查詢等進階主題。