處理實體資料

Entity Framework 會將一組概念模型和儲存體模型中繼資料,以及兩種模型之間的對應編譯成 Entity SQL 陳述式的雙向組合,稱為「用戶端檢視」。 這些檢視會驅動查詢及更新執行階段引擎中的處理。 在設計階段或執行階段針對概念模型執行第一個查詢時,都可以叫用產生這些檢視的對應編譯器。

Entity Framework 會提供 EntityConnection 給基礎資料提供者和資料來源,藉此建置於儲存體專用 ADO.NET 資料提供者之上。

執行查詢時,會先剖析查詢然後將它轉換成標準命令樹,也就是此查詢的物件模型表示方式。 標準命令樹可表示選取、更新、插入和刪除命令。 所有後續處理都是在命令樹上執行,這是 System.Data.EntityClient 提供者與基礎 .NET Framework 資料提供者 (例如 System.Data.SqlClient) 之間的通訊方式。

下圖說明用於存取資料的 Entity Framework 架構:

Entity Framework 架構圖表

查詢物件

ADO.NET 實體資料模型工具會產生從 ObjectContext (代表概念模型中所定義的實體容器) 衍生而來的類別。 ObjectContext 類別支援針對將實體當成物件傳回之概念模型進行查詢,也支援建立、更新和刪除實體物件。 Entity Framework 支援針對概念模型進行物件查詢。 這些查詢可以使用 Entity SQL 、Language-Integrated Query (LINQ) 和物件查詢產生器方法來撰寫。

在概念模型中,實體是利用關聯來彼此聯結。 在物件層中,這些情況是以依據實體參考公開相關物件集合的屬性表示。 例如,在 School 模型中,Department.Course 會依據 CourseDepartment 之間的關聯取得 Course 物件的實體集合。 如果 ObjectContext 類別上的 LazyLoadingEnabled 屬性設定為 false,所參考的物件並不會自動載入,而且您必須呼叫實體參考上的 Load 方法將相關物件資料載入物件內容中。

Bb399760.note(zh-tw,VS.100).gif注意:
如果您已使用實體資料模型設計工具產生物件層程式碼,則 ObjectContext 類別上的 LazyLoadingEnabled 屬性預設會設定為 true

您也可以指定一個查詢路徑,定義哪些相關物件要與傳回物件一同載入。 如需詳細資訊,請參閱查詢概念模型 (Entity Framework)

以下快速入門的範例示範會在執行時擷取所有 Department 物件的查詢。 查詢路徑定義可確保與 Department 物件相關的 Course 物件也會傳回 Entity SQL ORDER BY 子句會依 Name 排序傳回的物件。

' Define a query that returns all Department objects
' and related Course objects, ordered by name.
Dim departmentQuery As ObjectQuery(Of Department) = _
    From d In schoolContext.Departments.Include("Courses") _
    Order By d.Name _
    Select d
// Define a query that returns all Department  
// objects and course objects, ordered by name.
var departmentQuery = from d in schoolContext.Departments.Include("Courses")
                      orderby d.Name
                      select d;

如需詳細資訊,請參閱查詢概念模型 (Entity Framework)

您可以定義一組會使用預存程序針對資料來源執行查詢的模型。 來自這些預存程序的結果集會對應到概念模型中的實體。 如需詳細資訊,請參閱 How to: Import a Stored Procedure

處理物件

物件內容中的物件是資料來源中資料的實體類型表示方式。 您可以修改、建立及刪除物件內容中的物件。 物件內容可管理物件之間的實體和關聯性。 您也可以將物件序列化以及將物件繫結到控制項。 如需詳細資訊,請參閱使用物件

以下快速入門的範例會取得與 Department 物件關聯的 Course 物件集合,並將此集合繫結到 DataGridView 控制項。

' Get the object for the selected department.
Dim department As Department = _
    CType(Me.departmentList.SelectedItem, Department)

' Bind the grid view to the collection of Course objects 
' that are related to the selected Department object.
courseGridView.DataSource = department.Courses
//Get the object for the selected department.
Department department = (Department)this.departmentList.SelectedItem;

//Bind the grid view to the collection of Course objects
// that are related to the selected Department object.
courseGridView.DataSource = department.Courses;

Entity Framework 會追蹤實體資料的變更,並且可以讓您將變更存回資料來源。 在以下快速入門的範例中,物件內容中的變更會寫入到資料庫。

' Save object changes to the database, 
' display a message, and refresh the form.
schoolContext.SaveChanges()

如需詳細資訊,請參閱建立、加入、修改和刪除物件

您可以定義一個會使用預存程序針對資料來源插入、更新和刪除資料的概念模型。 這些預存程序會對應到概念模型中的實體。 如需詳細資訊,請參閱Walkthrough: Mapping an Entity to Stored Procedures

另請參閱

概念

使用物件
LINQ to Entities 中的查詢