2012-01-25 5 views
1

ObjectContextに削除を実行したいと思います。ObjectContextからEntityObjectsのコレクションに属するEntityObjectを削除する方法はありますか?

これは私のコードです:

var tempList = someEntityObject.SomeCollectionOfEntityObject; 

foreach (var item in tempList) 
{ 
    someObjectContext.DeleteObject(item); 
    tempList.Remove(item); 
} 

私はsomeEntityObjectを削除したいのですが、私ができる前に、私はSomeCollectionOfEntityObject内のすべてのオブジェクトを削除する必要があります。 someEntityObjectを削除できないような外部キー制約があります。

のforeachループに私はこのエラーを取得し二度目しようとします:代わりにwhileループを使用し

System.InvalidOperationException occurred 
    Message=Collection was modified; enumeration operation may not execute. 

答えて

3

代わりtempList上のforeachを使用してのあなたがコレクションを読み込むことができます実際の一時的なリストが最初にあります。

var realList = tempList.ToList(); 

次に、tempListをクリアしてからrealListを反復処理できます。

+1

これは私がやる方法です – KroaX

+0

@KroaXあなたは正しいです。この方法はより高速です。少ないコード。 =) – Willem

1

を:

while(someEntityObject.SomeCollectionOfEntityObject.Count > 0) 
{ 
    someObjectContext.DeleteObject(someEntityObject.SomeCollectionOfEntityObject.First()); 
} 
+0

クール、それは動作します! Thx – Willem

1

もう1つの選択肢は、関係にカスケード削除を指定することです。

someCollectionOfEntityObject内のすべてのレコードが、someEntityObjectを削除すると自動的に削除されます。

モデルとデータベースの両方で確実に動作するようにする必要があります。詳細については、この投稿を参照してください:http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx

+0

+1。いいね! – Willem

関連する問題