2011-02-07 279 views
14

刪除對象我有一個「請求」實體與1 .. *的「RequestProperty」實體關係。所以在Request中有RequestProperty對象的集合。當我更新「請求」時,我想刪除RequestProperty EntityCollection中的所有項目,並從傳入域對象中添加新項目。當我遍歷Request.Properties採集和調用刪除或DeleteObject上的項目,因爲該集合已經被修改枚舉失敗。實體框架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這是Order表的FK。使用此配置,您不需要遍歷OrderItem,並分別刪除每個項目。只需從集合中移除OrderItem就會執行刪除數據庫和清理收集將在數據庫中刪除所有相關OrderItem秒。

1

使用Clear()方法:

newRequest.Properties.Clear(); 
+1

將無法​​正常工作,在RequestProperty表的外鍵列不可爲空。我想我可以改變這個和/或設置刪除級聯。 – hoetz 2011-02-07 14:23:13

+1

在這種情況下,你應該*設置級聯刪除,恕我直言。 – 2011-02-07 14:33:15