ObjectSet の使用 (Entity Framework)

.NET Framework Version 3.5 SP1 では、個々のモデルの ObjectContext クラスには通常、特定のエンティティ セットに関するクエリを表す ObjectQuery 型のプロパティ セットがあります。 さらに、ObjectContext には、オブジェクトの追加、削除、アタッチ、および更新を行うメソッドがあります。 通常、これらのメソッドは、オブジェクトと、エンティティ セット名を指定する文字列パラメーターを受け取ります。 .NET Framework バージョン 4 では、個々のモデルの ObjectContext クラスには、代わりに、モデルのエンティティ セットを表す ObjectSet 型のプロパティがあります。 CreateObjectSet メソッドとそのオーバーロードは、新しい ObjectSet インスタンスを作成します。 .NET Framework バージョン 4 では、ObjectSet オブジェクトに対してメソッドを使用して、作成、読み取り、削除、アタッチ、および更新操作を実行することをお勧めします。 ObjectSetObjectQuery から派生するので、クエリ オブジェクトとしても機能します。

.NET Framework バージョン 4 以降では、ObjectContext で定義された同等のメソッドの代わりに、ObjectSet で定義された次のメソッドを使用できます。

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 型を定義できます。 また、テスト IObjectSet 型のプロパティを公開してエンティティ セットをテスト データで初期化するメソッドが含まれているテスト ObjectContext クラスも定義する必要があります。

.NET Framework バージョン 4 におけるテスト容易性の向上の例については、ADO.NET チームのブログおよび Julie Lerman のブログの投稿を参照してください。

参照

概念

オブジェクトの使用 (Entity Framework)