Entity Framework の .Remove() と .DeleteObject() の違いと応用
Entity Framework を使用する場合、データベース項目を削除する 2 つの異なる方法、EntityCollection.Remove()
と ObjectContext.DeleteObject()
が使用される場合があります。どちらもデータベースからエンティティを削除することを目的としていますが、機能と特徴は異なります。
EntityCollection.Remove()
このメソッドは、親エンティティと子エンティティの間の関係を削除します。つまり、子エンティティ自体を実際に削除することなく、コンテキスト内で関係が削除済みとしてマークされます。子エンティティの EntityState
は変更されません。
親エンティティと子エンティティの間の関係に応じて、SaveChanges
を呼び出した後に .Remove()
を使用する効果は異なります。
SaveChanges
の後にデータベースから削除されます。 ObjectContext.DeleteObject()
このメソッドは、ObjectContext
内の指定されたエンティティを削除済みとしてマークします。エンティティの EntityState
はすぐに Deleted
に設定されます。 SaveChanges
を呼び出した後、EF は SQL DELETE
ステートメントをデータベースに送信します。必要な条件がすべて満たされると (たとえば、参照制約に違反しない場合)、エンティティはデータベースから削除されます。
いつどの方法を使用するか
SaveChanges
の後にデータベースから削除するために使用されます。 その他の注意事項
.Remove()
は成功または失敗を示すブール値を返しますが、.DeleteObject()
は void を返します。 .Remove()
は SaveChanges
の後に制約違反を引き起こす可能性があります。 .DeleteObject()
エンティティを明示的に削除済みとしてマークし、データベースから確実に削除します。 以上がEntity Framework: `Remove()` と `DeleteObject()` – いつどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。