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

ADO.NET 與 ORM 實戰對比 (四):Entity Framework 實作 CRUD 全紀錄

     編輯:關於.NET

本系列以相同資料表 (UserInfo) 實作 CRUD,對比 ADO.NET、NHibernate、Linq to SQL、Entity Framework 四種方式。EF 為微軟較晚推出的 ORM,修正 Linq to SQL 單一資料庫限制,並提供 Linq to Entities、Entity SQL、EntityKey 多種查詢管道。

模型建立流程 (Database First)

  1. 專案加入「ADO.NET Entity Data Model」(.edmx)
  2. 選擇「從資料庫產生」→ 設定連線 → 選取表/檢視/預存程序
  3. 設計師視覺化呈現實體關聯,支援屬性編輯與資料庫同步更新

加入 EDMX 選擇模型內容 資料庫連線 連線設定 選取資料表 設計師視圖 屬性編輯 從資料庫更新

CRUD 核心程式碼 (EntityFrameworkCRUD)

public class EntityFrameworkCRUD
{
    public int Count()
    {
        using (var ctx = new AspNetStudyEntities())
            return ctx.UserInfo.Count();
    }

    public void Create(UserInfo info)
    {
        using (var ctx = new AspNetStudyEntities())
        {
            ctx.AddToUserInfo(info);
            ctx.SaveChanges();
        }
    }

    public UserInfo Read(int userId)
    {
        using (var ctx = new AspNetStudyEntities())
        {
            var key = new EntityKey("AspNetStudyEntities.UserInfo", "UserID", userId);
            return ctx.GetObjectByKey(key) as UserInfo;
        }
    }

    public void Update(UserInfo info)
    {
        using (var ctx = new AspNetStudyEntities())
        {
            var ui = ctx.UserInfo.First(u => u.UserID == info.UserID);
            ui.Age = info.Age; ui.Email = info.Email; ui.Mobile = info.Mobile;
            ui.Phone = info.Phone; ui.RealName = info.RealName; ui.Sex = info.Sex;
            ui.UserName = info.UserName;
            ctx.SaveChanges();
        }
    }

    public void Delete(int userId)
    {
        using (var ctx = new AspNetStudyEntities())
        {
            var ui = ctx.UserInfo.First(u => u.UserID == userId);
            ctx.DeleteObject(ui);
            ctx.SaveChanges();
        }
    }

    public int GetMaxUserId()
    {
        using (var ctx = new AspNetStudyEntities())
            return ctx.UserInfo.Max(u => u.UserID);
    }
}

NUnit 單元測試驗證

測試涵蓋 Count、Create、Read、Update、Delete (依 ID/實體) 等情境,全數通過。

效能與架構權衡總結

維度ADO.NETORM (EF/NH/L2S)
執行效能最高 (直連 SQL)略低 (轉譯開銷)
開發速度較慢 (手寫 SQL/映射)快 (物件導向、自動映射)
資料庫變更彈性低 (多層修改)高 (僅調整映射/實體)
程式碼一致性/可維護性依賴開發者風格框架強制統一風格

EF 四種查詢方式提供情境彈性:Linq to Entities (強型別)、Entity SQL (動態查詯、僅支援 Select)、EntityKey (主鍵直取)、原生 SQL。技術選型應依專案規模、團隊經驗、效能需求、資料庫異構度綜合判斷。

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