【问题标题】:Clear list of entity objects (C# and entity framework 4)清除实体对象列表(C# 和实体框架 4)
【发布时间】:2012-02-01 16:01:35
【问题描述】:

我有一个要从数据库中删除的对象列表。有没有比使用更好的方法:

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

显然这每次都会对数据库进行删除查询,这确实很耗时。

最后我决定用其他方式来做,但我确信一定有更好的解决方案。 这就是我想做的(获得所有 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();
            }
        }

非常感谢您的帮助。

【问题讨论】:

    标签: c# list frameworks entity


    【解决方案1】:

    我过去使用 EF 进行批量删除的方式是从您上面提到的(使用循环)到使用 context.ExecuteStoreQuery("DELETE FROM catalog"); 实际运行硬编码删除查询的任何方式

    在你有循环的版本上,它应该在你执行 context.SaveChanges() 后进行批量删除,不应该吗?

    【讨论】:

    • 它没有,如果获取所有结果并一一删除它们。但解决方案是创建另一个到数据库的连接并执行您建议的 DELETE FROM 目录查询。我希望我以前见过这个:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多