使用 ObjectSet (Entity Framework)

在 3.5 SP1 版的 .NET Framework 中,特定模型的 ObjectContext 類別通常會有一組 ObjectQuery 型別的屬性,代表針對特定實體集進行的查詢。 ObjectContext 也有進行加入、刪除、附加及更新物件的方法。 這些方法通常會接受物件和指定實體集名稱的字串參數。 在 .NET Framework 4 版中,特定模型的 ObjectContext 類別卻擁有代表模型之實體集的 ObjectSet 型別的屬性。 CreateObjectSet 方法及其多載會建立新的 ObjectSet 執行個體。 在 .NET Framework 4 版中,建議您使用 ObjectSet 物件上的方法來執行建立、讀取、刪除、附加及更新作業。 ObjectSet 衍生自 ObjectQuery,因此也可以當做查詢物件。

從 .NET Framework 4 版開始,您就可以使用以下針對 ObjectSet 定義的方法,而不使用針對 ObjectContext 定義的相同方法:

AddObject

Attach

ApplyCurrentValues

ApplyOriginalValues

DeleteObject

Detach

例如,在 .NET Framework 4 中,請使用下列程式碼:

using (AdventureWorksEntities context =

new AdventureWorksEntities())

{

// Add the new object to the context.

context.Products.AddObject(newProduct);

}

在 .NET Framework 3.5 SP1 中,請使用下列程式碼:

using (AdventureWorksEntities context =

new AdventureWorksEntities())

{

// Add the new object to the context.

context.AddObject("Products", newProduct);

}

下列範例將示範如何使用非具型別的 ObjectContext 來建立 ObjectSet 執行個體。

' Create the ObjectContext. 
Dim context As New ObjectContext("name=AdventureWorksEntities")

Dim query As ObjectSet(Of Product) = context.CreateObjectSet(Of Product)()

' Iterate through the collection of Products. 
For Each result As Product In query
    Console.WriteLine("Product Name: {0}", result.Name)
Next
// Create the ObjectContext.
ObjectContext context =
    new ObjectContext("name=AdventureWorksEntities");

ObjectSet<Product> query = context.CreateObjectSet<Product>();

// Iterate through the collection of Products.
foreach (Product result in query)
    Console.WriteLine("Product Name: {0}", result.Name);

ObjectSet 類別會實作 IObjectSet 介面。 在測試案例中,IObjectSet 介面非常有用。 若要建立會測試應用程式但不會在資料來源執行查詢的單元測試,您可以使用測試物件,它們是以測試資料填入記憶體的。 您可以定義會實作 IObjectSet 的測試 ObjectSet 型別,而且可以將測試資料儲存在資料來源之外。 您還必須定義測試 ObjectContext 類別,它會將測試 IObjectSet 型別的屬性公開,而且擁有會初始化具有測試資料之實體集的方法。

如需 .NET Framework 4 版中測試能力改良的範例,請參閱下列部落格文章:ADO.NET 小組部落格 (英文) 和 Julie Lerman 的部落格 (英文)。

另請參閱

概念

使用物件