首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

ASP.NET MVC 搭配 Entity Framework 建立模型類完整實作

     編輯:C# 入門

前言

Entity Framework (EF) 是微軟提供的物件關聯對映 (ORM) 框架,讓開發者能以物件導向方式操作資料庫,大幅減少撰寫 ADO.NET 程式碼的負擔。本文將以 ASP.NET MVC 專案為例,示範如何使用 EF 建立模型類、執行 CRUD 操作,並說明 LINQ 查詢的兩種寫法差異。

環境需求

  • Visual Studio 2008 SP1 或更新版本
  • .NET Framework 3.5 SP1 以上
  • SQL Server Express / LocalDB

建立 ADO.NET 實體資料模型

  1. 在 Models 資料夾右鍵 → 新增項目 → ADO.NET Entity Data Model
  2. 命名為 MoviesDB.edmx
  3. 選擇「從資料庫產生」,設定連線字串指向 Movie 資料庫
  4. 勾選所需資料表(如 Movies),模型命名空間設為 MovieEntityApp.Models

完成後,EF 會自動產生 MoviesDBEntities 內容類別與 Movie 實體類別。

Controller 實作:資料查詢與傳遞

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();
        }
    }
}

關鍵說明

  • _db 欄位:在建構子中初始化 MoviesDBEntities,代表資料庫連線內容。
  • 命名空間引用:必須 using MovieEntityApp.Models; 才能存取實體類別。
  • ToList():將 IQueryable<Movie> 具體化為 List<Movie>,觸發實際 SQL 查詢。

LINQ 方法語法 vs 查詢語法

兩種寫法編譯後產生相同的 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 子句

View 實作:強型別檢視頁面

<%@ 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>

擴充實體類別:使用 Partial Class

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})";
    }
}

常見錯誤與解決方案

  • Context 生命週期:每個 Request 建立一個 Context,請勿靜態共用,避免執行緒安全與連線洩漏問題。
  • Lazy Loading 陷阱:預設開啟延遲載入,巡覽屬性存取時會觸發額外查詢。大量資料時請使用 .Include() 預先載入。
  • 連線字串遺失:部署時確認 Web.config 中 connectionStrings 區段正確指向目標資料庫。

總結

Entity Framework 配合 ASP.NET MVC 能快速建立資料驅動的 Web 應用程式。掌握模型建立、LINQ 查詢兩種語法、強型別 View 以及 Partial Class 擴充技巧,即可應付大多數中小型專案的資料存取需求。後續可進一步學習 Code First、Migration、非同步查詢等進階主題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved