2012-02-01 99 views
0

我已經列出了要從數據庫中刪除的對象。有沒有更好的辦法做到這一點比使用:清除實體對象列表(C#和實體框架4)

foreach (Entity e in entities) 
{ 
    context.Entities.remove(e); 
} 

顯然,這將每次的DB,這是非常耗費時間在做刪除查詢。

最後我決定以其他方式做,但我確定必須有更好的解決方案。 這就是我想做的事(讓所有WTA,然後將其刪除):

 List<int> cycles = scenario.Cycles.Select(x=>x.cycle_id).ToList(); 
     List<int> activitiesForScenario = context.Activities.Where(
      a=> cycles.Contains(a.Cycle.cycle_id)).Select(a=>a.activity_id).ToList(); 
     List<WTA> wtas= 
      context.WTAs.Where(wta => activitiesForScenario.Contains(wta.activity_id_fk)).ToList(); 


     foreach (Week_TSE_activities wta in weekTSEactivities) 
     { 
      context.Week_TSE_activities.Remove(wta); 
     } 

這是怎麼回事,現在(好多了,但我不認爲這是一個很好的解決方案) 。

 foreach (Cycle cycle in scenario.Cycles) 
     { 
      foreach (Activity activity in cycle.Activities) 
      { 
       activity.WTAs.Clear(); 
      } 
     } 

有很多幫助。

回答

1

我做大規模的方式刪除過去使用EF是從您上面提到的內容(使用循環),以實際運行上所擁有的版本使用context.ExecuteStoreQuery("DELETE FROM catalog");

一個硬編碼刪除查詢什麼循環,它應該做一個批量刪除一旦你做了context.SaveChanges()不應該?

+0

它不會,如果獲取所有結果並逐個刪除它們。但解決方案是創建與數據庫的另一個連接並執行您建議的DELETE FROM目錄查詢。我希望我以前見過這個:) – Tiago 2012-08-08 18:36:54