Очистить список объектов сущностей (C # и структура сущностей 4) - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть список объектов, которые я хочу удалить из базы данных.Есть ли лучший способ сделать это, чем с помощью:

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

Большое спасибо за помощь.

1 Ответ

1 голос
/ 01 февраля 2012

То, как я делал массовые удаления с использованием EF в прошлом, было чем-то от того, что вы упомянули выше (с помощью цикла), до фактического выполнения жестко закодированного запроса на удаление с использованием context.ExecuteStoreQuery("DELETE FROM catalog");

в версии, которая у вас есть с зацикливанием, она должна выполнять массовое удаление после выполнения контекста. SaveChanges () не должно ли это быть?

...