2012-02-01 4 views
0

私はデータベースから削除したいオブジェクトのリストを持っています。使用するよりも、それを行うには良い方法はあります:エンティティオブジェクトのリストをクリアします(C#とエンティティフレームワーク4)

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

は、どうやらこれは本当に時間がかかりDB、各時点で削除クエリを行います。

最後に私は別の方法でやることにしましたが、よりよい解決策が必要であると確信しています。

 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); 
     } 

そしてこれは、それが今ある方法です(より良い、私はそれが良い解決策だとは思わない): これは私がやりたい(すべてのWTAを取得し、その後、それらを削除するには)何です。

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

Tnksが助けてくれます。

答えて

1

私は質量が過去にEFを使用して削除やった方法は、あなたが実際にあなたが持っているバージョンにcontext.ExecuteStoreQuery("DELETE FROM catalog");

を使用して、ハードコーディングされた削除クエリを実行するために(ループを使用して)上で言及したものとは何でしたループでは、一度あなたがcontext.SaveChanges()をしないと大量削除を行う必要がありますか?

+0

すべての結果をフェッチして1つずつ削除しても、それはありません。しかし、解決策は、データベースへの別の接続を作成し、提案したDELETE FROMカタログ問合せを実行することでした。私はこれを前に見たことがあります:) – Tiago

関連する問題