Поделиться через


Работа с ObjectSet (платформа Entity Framework)

В версии .NET Framework 3.5 с пакетом обновления 1 (SP1) класс 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 с пакетом обновления 1 (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 может оказаться полезным при тестировании сценариев. Для создания модульных тестов, проверяющих приложение без выполнения запросов на источнике данных, можно воспользоваться тестовыми объектами, заполняемыми тестовыми данными в памяти. Можно определить тип теста ObjectSet, который реализует интерфейс IObjectSet и сохраняет тестовые данные за пределами источника данных. Кроме того, необходимо определить тестовый класс ObjectContext, который содержит свойства тестового типа IObjectSet и имеет метод, инициализирующий наборы сущностей тестовыми данными.

Примеры улучшения возможностей тестирования в .NET Framework версии 4 см. в сообщениях следующих блогов: блога группы разработчиков ADO.NET и блога Джули Лерман (на английском языке).

См. также

Основные понятия

Работа с объектами (платформа Entity Framework)