使用 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 定義的相同方法:
例如,在 .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 的部落格 (英文)。