
- 實體框架教程
- 實體框架 - 首頁
- 實體框架 - 概述
- 實體框架 - 架構
- 實體框架 - 環境設定
- 實體框架 - 資料庫設定
- 實體框架 - 資料模型
- 實體框架 - DbContext
- 實體框架 - 型別
- 實體框架 - 關係
- 實體框架 - 生命週期
- 實體框架 - 程式碼優先方法
- 實體框架 - 模型優先方法
- 實體框架 - 資料庫優先方法
- 實體框架 - 開發方法
- 實體框架 - 資料庫操作
- 實體框架 - 併發
- 實體框架 - 事務
- 實體框架 - 檢視
- 實體框架 - 索引
- 實體框架 - 儲存過程
- 實體框架 - 斷開連線的實體
- 實體框架 - 表值函式
- 實體框架 - 本機SQL
- 實體框架 - 列舉支援
- 實體框架 - 非同步查詢
- 實體框架 - 持久化
- 實體框架 - 投影查詢
- 實體框架 - 命令日誌
- 實體框架 - 命令攔截
- 實體框架 - 空間資料型別
- 實體框架 - 繼承
- 實體框架 - 遷移
- 實體框架 - 渴望載入
- 實體框架 - 延遲載入
- 實體框架 - 顯式載入
- 實體框架 - 驗證
- 實體框架 - 跟蹤更改
- 實體框架 - 彩色實體
- 實體框架 - 程式碼優先方法
- 實體框架 - 第一個示例
- 實體框架 - 資料註釋
- 實體框架 - Fluent API
- 實體框架 - 填充資料庫
- 實體框架 - 程式碼優先遷移
- 實體框架 - 多個DbContext
- 實體框架 - 巢狀實體型別
- 實體框架資源
- 實體框架 - 快速指南
- 實體框架 - 有用資源
- 實體框架 - 討論
實體框架 - DbContext
實體框架使您能夠使用稱為實體的公共語言執行時 (CLR) 物件查詢、插入、更新和刪除資料。實體框架將模型中定義的實體和關係對映到資料庫。它還提供以下功能:
- 將從資料庫返回的資料具體化為實體物件
- 跟蹤對物件進行的更改
- 處理併發
- 將物件更改傳播回資料庫
- 將物件繫結到控制元件
負責以物件形式與資料互動的主要類是 System.Data.Entity.DbContext。DbContext API 並非作為 .NET Framework 的一部分發布。為了能夠更靈活、更頻繁地向 Code First 和 DbContext API 釋出新功能,實體框架團隊透過 Microsoft 的 NuGet 分發功能分發 EntityFramework.dll。
NuGet 允許您透過從 Web 直接將相關的 DLL 拉入您的專案來向您的 .NET 專案新增引用。
一個名為庫包管理器 Visual Studio 擴充套件提供了一種簡單的方法,可以將合適的程式集從 Web 拉入您的專案。

DbContext API 主要針對簡化與實體框架的互動。
它還減少了您需要訪問的用於執行常用任務的方法和屬性的數量。
在早期版本的實體框架中,這些任務通常難以發現和編碼。
上下文類在執行時管理實體物件,包括使用來自資料庫的資料填充物件、更改跟蹤以及將資料持久化到資料庫。
定義 DbContext 派生類
使用上下文的首選方法是定義一個從 DbContext 派生的類,並公開表示上下文中指定實體集合的 DbSet 屬性。如果您正在使用 EF 設計器,則會為您生成上下文。如果您使用的是 Code First,則通常會自己編寫上下文。
以下程式碼是一個簡單的示例,它顯示 UniContext 是從 DbContext 派生的。
您可以將自動屬性與 DbSet 一起使用,例如 getter 和 setter。
它還使程式碼更加簡潔,但在您沒有其他邏輯要應用的情況下,您不需要將其用於建立 DbSet 的目的。
public class UniContext : DbContext { public UniContext() : base("UniContext") { } public DbSet<Student> Students { get; set; } public DbSet<Enrollment> Enrollments { get; set; } public DbSet<Course> Courses { get; set; } }
以前,EDM 用於生成從 ObjectContext 類派生的上下文類。
使用 ObjectContext 稍微複雜一些。
DbContext 是 ObjectContext 的一個包裝器,它實際上類似於 ObjectContext,並且在所有開發模型(如 Code First、Model First 和 Database First)中都非常有用且易於使用。
查詢
您可以使用三種類型的查詢,例如:
- 新增新實體。
- 更改或更新現有實體的屬性值。
- 刪除現有實體。
新增新實體
使用實體框架新增新物件就像構造物件的例項並使用 DbSet 上的 Add 方法註冊它一樣簡單。以下程式碼用於將新學生新增到資料庫。
private static void AddStudent() { using (var context = new UniContext()) { var student = new Student { LastName = "Khan", FirstMidName = "Ali", EnrollmentDate = DateTime.Parse("2005-09-01") }; context.Students.Add(student); context.SaveChanges(); } }
更改現有實體
更改現有物件就像更新分配給您想要更改的屬性的值並呼叫 SaveChanges 一樣簡單。在以下程式碼中,Ali 的姓氏已從 Khan 更改為 Aslam。
private static void AddStudent() { private static void ChangeStudent() { using (var context = new UniContext()) { var student = (from d in context.Students where d.FirstMidName == "Ali" select d).Single(); student.LastName = "Aslam"; context.SaveChanges(); } } }
刪除現有實體
要使用實體框架刪除實體,您可以在 DbSet 上使用 Remove 方法。Remove 適用於現有實體和新新增的實體。對已新增但尚未儲存到資料庫的實體呼叫 Remove 將取消實體的新增。該實體將從更改跟蹤器中刪除,並且 DbContext 不再跟蹤該實體。對正在更改跟蹤的現有實體呼叫 Remove 將在下次呼叫 SaveChanges 時註冊該實體以進行刪除。以下示例顯示了從資料庫中刪除名為 Ali 的學生的例項。
private static void DeleteStudent() { using (var context = new UniContext()) { var bay = (from d in context.Students where d.FirstMidName == "Ali" select d).Single(); context.Students.Remove(bay); context.SaveChanges(); } }