Entity Frameworkでオブジェクトとそのすべての関連エンティティを削除する

ado.net entity-framework

質問

オブジェクトグラフを手動でたどってそれぞれを削除せずに、オブジェクトとその関連エンティティすべてをEF内で削除する方法を知っている人はいますか?

たとえば、SalesOrderとSalesOrderDetailsは1対Nの関係にあります。 SalesOrderを削除したら、SalesOrderDetailsをすべて自動的に削除します。

これはEFで可能ですか。

受け入れられた回答

Entity Frameworkではこれをしてはいけません。一般的なリレーショナルデータベースはすべて、外部キーに対するON CASCADE DELETEをサポートしています。これは、はるかに効率的です。私はあなたがそれと一緒に行くことを勧めます。


人気のある回答

この記事の中で、Alex Jamese(彼の答えを投稿した人)は、このトピックに関する完全な記事を持っています。

http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx

EFは、SaveChanges()の後のObjectContextの正確さに責任があります。そのため、EFはObjectContextを、データベース内の予想されるカスケード後の予想されるデータベース状態と同期させようとします。 SqlProfilerのようなものを開くと、プリンシパルが削除されたときにEFが認識している(つまりObjectContextにロードされている)依存エンティティに対してDELETE要求を発行していることに気付くでしょう。本質的にここで起こっていることはEntity Frameworkがデータベース内のプリンシパルを削除することがデータベース内のすべてのそれの依存物を削除することを期待しているということです。そのため、すでにロードされている依存関係がObjectContextから削除されるように、自分自身を要求するための冗長なDELETEが発行されます。注意すべき重要な点は、EF すべての依存エンティティを取得してそれらに対して削除を発行するわけではないことです。すでにメモリ内にある依存エンティティを削除するだけです。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ