使用 ObjectSet(实体框架)
在 .NET Framework 版本 3.5 SP1 中,特定模型的 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 的博客(可能为英文网页)。