2011-02-07 8 views
14

"RequestProperty"エンティティと1 .. *の関係を持つ "Request"エンティティがあります。そのため、RequestPropertyオブジェクトのコレクションが「リクエスト」にあります。 "Request"を更新すると、RequestProperty EntityCollection内のすべてのアイテムを削除し、着信ドメインオブジェクトから新しいアイテムを追加します。 Request.Propertiesコレクションを繰り返し処理し、そのアイテムに対してremoveまたはDeleteObjectを呼び出すと、コレクションが変更されているため列挙に失敗します。これは私が関係のコレクションを空にするための別の方法が存在しなければならないと思った本当に「クール」ではありませんのでEntity Framework 4エンティティコレクションからオブジェクトを削除する

while (true) 
{ 
    if (newRequest.Properties.Count > 0) 
     context.RequestPropertySet.DeleteObject(newRequest.Properties.First()); 
    else 
     break; 
} 

:今、私はこれをやっているのよう

。あなたの考えをありがとう。

答えて

19

答えはあなたのエンティティをモデル化する方法に依存します。共通の独立した関係や外部のキー関係を使用している場合は、現在のアプローチを使用する必要があります - 私はプロジェクトでも同様に使用しています。

リレーションシップの識別を定義した場合は、収集時に@Craigと記載されているClearを呼び出すことができます。関係を特定することは、依存エンティティの主キーに親エンティティの外部キーが含まれる特殊な関係です。

Example EF model

例は、それらの間の関係を識別する外部キーとOrderエンティティとOrderItemエンティティを示しています。 OrderItemの主キーは、IdOrderIdで構成され、FKはOrderです。この設定では、OrderItemを繰り返し処理する必要はなく、各項目を個別に削除する必要があります。コレクションからOrderItemを単に削除すると、データベース内の削除として実行され、コレクションをクリアするとデータベース内のすべての関連するOrderItemが削除されます。

+0

私は本質的に上記のOrder <-association-> OrderItemと同じモデル構造を使用しようとしています。実行時に次のエラーが表示され続けます。 Namespace.Models.OrderItem :: EntityType 'OrderItem'にはキーが定義されていません。このEntityTypeのキーを定義します。 OrderItem:EntityType:EntitySet 'OrderItems'は、キーが定義されていない型 'OrderItem'に基づいています。 主な相違点は、OrderItemにキー以外のプロパティはありません。 – user1003221

1

Clear()メソッドを使用します。

newRequest.Properties.Clear(); 
+1

RequestPropertyテーブルの外部キー列がNULL可能でないため、機能しません。私はそれを変更したり、削除のカスケードを設定することができたと思う。 – hoetz

+1

この場合、削除、IMHOのカスケードを設定する必要があります。 –

関連する問題