2011-01-07 13 views
2

以前のプロジェクトでは、EF4でカスケード削除を実行しました(親レコードを削除し、子レコードも削除されます)。このプロジェクト(別の会社)では、EF4はカスケード削除を実行していません。 EF4にカスケード削除を実行させるには何が必要ですか?EF4でカスケード削除を実行するにはどうすればよいですか?

+0

おそらく私はこの問題を完全には理解していませんが、データベースによって実行されるカスケード削除ではないのでしょうか?これはどのようにEFの問題になりますか? –

答えて

4

EF4のカスケード削除だけでは十分ではありません。すべての子がオブジェクトコンテキストにロードされていない場合は、データベースにカスケード削除を設定する必要があります。つまり、カスケード削除プロパティはアサーションに設定されます。モデルブラウザに移動し、アサーションを選択してプロパティを表示します。

+0

アーキテクトによると、私たちはデータベースにカスケード削除を設定しておらず、設定もしていません。アソシエーションのプロパティを見ていきます。ありがとう! – DenaliHardtail

+0

@スペシャルそれはあなたのパーティーです:)それはどちらの方向にでも設定できます。 OnDeleteプロパティを確認します。 – morganpdx

+2

MorganPDXはただ1か所でそれをやっていないのが正しいです。 EDMで設定した場合、関連するすべてのデータがメモリにロードされていない可能性がある場合は、十分注意しなければなりません。 "子"がデータベースにあり、カスケードしていない場合は、dbが "親"を削除しようとすると例外が発生します。ちょうどsayin ....それはEFチームからの勧告です。 –

0

私は同じボートに乗っています。私は、EDM/EF4でカスケードし、データベースではまだカスケードしていません。これを試してみてください...

この関係では、親の終わりのOnDelete(1の多重度)をカスケードに設定してください。次に、あなたのコードですべての子をロードしてから変更を保存します(削除)。

var parent = context.Parents.SingleOrDefault(p => p.Id == parentId); 
parent.Children.Load(); 
if (parent != null) 
     { 
      context.Parent.DeleteObject(parent); 
      context.SaveChanges(); 
     } 
0

あなたは実装を削除カスケードの二つの方法があります:データベース層(トリガーまたは関係)の上にそれを設定

  1. は、拡張メソッドを使用してみてください。現在のテーブルの削除ロジックを定義し、関連するテーブル更新のためのメソッドを呼び出すことができます。
関連する問題