Entity Framework: .Remove() と .DeleteObject() のニュアンスを理解する
Entity Framework (EF) は、.Remove()
と .DeleteObject()
という 2 つのデータ削除方法を含む、データベース管理のための強力なツールを提供します。 どちらもデータを削除しますが、機能が大きく異なるため、特定のシナリオに適しています。
EntityCollection.Remove(): リレーションシップの管理
.Remove()
はエンティティ関係のみを操作します。 外部キーを無効にするか、子を直接削除することにより、親エンティティを子エンティティから切断します。
.Remove()
は外部キーを NULL
に設定し、子を削除せずにリンクを切断します。.DeleteObject()
による明示的な削除が必要です。そうしないと、参照制約違反が発生します。.Remove()
は子に削除のフラグを立て、DELETE
の呼び出し時に SaveChanges()
ステートメントをトリガーします。ObjectContext.DeleteObject(): エンティティの直接削除
対照的に、ObjectContext.DeleteObject()
は、EF コンテキスト内で削除対象のエンティティを直接マークします。 エンティティの EntityState
が Deleted
に変化し、DELETE
に対する SaveChanges()
ステートメントが要求されます。 ただし、参照制約が満たされていない場合は例外がスローされます。
適切な方法の選択: 実践ガイド
最適な選択は、状況と望ましい結果によって異なります。
.DeleteObject()
を使用します。.Remove()
を使用して、子エンティティのデータベースの存在に影響を与えずにエンティティ関係を切断するか (オプションの関係の場合)、子を明示的に削除します (関係を識別する場合)。.Remove()
はブール値の成功インジケーターを返し、.DeleteObject()
は void
を返すことに注意してください。
以上がEntity Framework: .Remove() と .DeleteObject() – いつどちらを使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。