Entity Framework 4 のオブジェクト管理: ObjectContext.AddObject メソッドと Attach メソッドの詳細な説明
Entity Framework 4 には、コンテキスト内のオブジェクトを管理するための 2 つのメソッドが用意されています。新しいオブジェクトを追加するための ObjectContext.AddObject
と ObjectSet.AddObject
、既存のオブジェクトを示すための ObjectContext.Attach
と ObjectSet.Attach
です。名前は似ていますが、オブジェクトのライフサイクル管理ではまったく異なる役割を果たします。
ObjectContext.AddObject と ObjectSet.AddObject: オブジェクトの誕生
新しいエンティティを操作する場合は、ObjectContext.AddObject
と ObjectSet.AddObject
を使用します。これらのメソッドは、データベースにまだ存在しないオブジェクトをコンテキストに追加します。新しく追加されたエンティティは、一時的な EntityKey と追加された EntityState を取得します。 SaveChanges
を呼び出した後、フレームワークはこれらのオブジェクトをデータベースに挿入する必要があるエンティティとして認識します。
ObjectContext.Attach および ObjectSet.Attach: 既存のオブジェクトへの接続
AddObject
とは異なり、ObjectContext.Attach
と ObjectSet.Attach
はデータベースにすでに存在するオブジェクトに使用されます。 Attach
EntityState を added に設定する代わりに Unchanged に設定し、オブジェクトがコンテキストにアタッチされてから変更されていないことを示します。 Attach
でマークされたエンティティは、EntityKey 値と一致することによってデータベース内で検索され、SaveChanges
が呼び出されるときにそれに応じて更新または削除されます。
Attach メソッドの実践的な応用例
AddObject
は新しいエンティティを作成するために使用され、Attach
は既存のオブジェクトを操作する場合に便利です。たとえば、コンテキスト内の既存の Person エンティティを既存の Address エンティティに接続するには:
<code class="language-csharp">var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name == "Joe Bloggs"); var myAddress = ctx.Addresses.First(a => a.PersonID != existingPerson.PersonID); existingPerson.Addresses.Attach(myAddress); // 或: myAddress.PersonReference.Attach(existingPerson); ctx.SaveChanges();</code>
Attach
操作により、Address エンティティが既存のエンティティとして認識され、person エンティティに接続されるようになり、データベースの正しい更新または削除操作が可能になります。
以上がEntity Framework 4 での AddObject と Attach: 各メソッドをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。