2012-02-01 59 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