Entity Framework の .Remove() メソッドと .DeleteObject() メソッドの違いの詳細な説明
Entity Framework には、データベースから項目を削除するための 2 つのオプションがあります: .Remove() と .DeleteObject()。どちらの方法もデータベース操作を対象としていますが、微妙な違いによって適用可能なシナリオが決まります。
ObjectContext.DeleteObject()
ObjectContext.DeleteObject() コンテキスト内でエンティティを削除対象としてマークします。この操作により、エンティティの EntityState が Deleted に設定されます。 SaveChanges を呼び出した後、EF は SQL DELETE ステートメントをデータベースにディスパッチします。ただし、参照制約に違反すると例外がスローされ、削除できなくなります。
EntityCollection.Remove()
EntityCollection.Remove() は、親エンティティと子エンティティの間の関係を削除済みとしてマークします。この操作自体は、データベースから子エンティティを直接削除しません。基礎となる関係に応じて、さまざまな状況が発生します:
戻り値と使用法
.Remove() は成功を示すブール値を返しますが、.DeleteObject() は void 型です。基本的に、.Remove() は関係を変更しますが、.DeleteObject() はエンティティに対して直接操作します。
したがって、データベースからエンティティを直接削除する場合は、.DeleteObject() を使用してください。ただし、子エンティティを削除せずにエンティティ間の関係を変更したい場合は、.Remove() を使用することをお勧めします。
.Remove() メソッドに関する MSDN ノート セクションでは、参照整合性制約についてやや曖昧であることに注意してください。 3 つの関係タイプすべてに制約がありますが、子エンティティが実際に削除されるのは、その関係が識別された場合のみです。
以上がEntity Framework: Remove() と DeleteObject(): 各メソッドをいつ使用するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。