2009-08-31 13 views
2

EFを使用してオブジェクト(およびその子オブジェクト)を削除する最適な方法は何ですか?私は削除するオブジェクトのIDだけを渡し、EFがその従属データ(外部キーのデータ)を削除するようにしたいと思います。 idに基づいて最初にオブジェクトを取得してから "DeleteObject"を呼び出す必要がありますか?Entity Framework DeleteObject子

答えて

8

カスケードがデータベースに設定されている場合は、原則を削除するだけで十分です。

あなたはこのようにスタブエンティティを使用して削除する事をGETするために、データベースへの問い合わせなしにこれを行うことができます。もちろん

var stub = new Principal{ID = idToDelete}; 
ctx.AttachTo("PrincipalsEntitySetName", stub); 
ctx.DeleteObject(stub); 

に使用参照またはフィールドがある場合、これは全体的な話ではありません並行性チェックでもそれらが必要になります。

あなただけのモデルでカスケードを削除する必要があり一方場合(つまり、データベースにはカスケードはありません)あなたは、第1のメモリにALL扶養を取得する必要があり、その後、削除を呼び出します:

var stub = new Principal{ID = idToDelete}; 
ctx.AttachTo("PrincipalsEntitySetName", stub); 
stub.Dependendents.Load(); 
ctx.DeleteObject(stub); 

これは、EFが(予想される)冗長削除を実行して、ObjectContextをデータベース内で発生すると予想されるものと同期させて保持するためにのみ機能します。

希望これは私が私のMSDNのブログにこのトピックに関するいくつかのtipsを持っている

アレックス

PSに役立ちます。 tip 33(カスケード削除)とtip 26(スタブエンティティ)