Как я удаляю несколько строк в Платформе Объекта (без foreach)

Я удаляю несколько объектов из таблицы с помощью Платформы Объекта. Нет внешнего ключа / родительский объект, таким образом, я не могу обработать это с OnDeleteCascade.

Прямо сейчас я делаю это:

var widgets = context.Widgets
    .Where(w => w.WidgetId == widgetId);

foreach (Widget widget in widgets)
{
    context.Widgets.DeleteObject(widget);
}
context.SaveChanges();

Это работает, но foreach ошибки меня. Я использую EF4, но я не хочу выполнять SQL. Я просто хочу удостовериться, что я ничего не пропускаю - это столь хорошо, как это добирается, правильно? Я могу абстрагировать его с дополнительным методом или помощником, но где-нибудь мы все еще собираемся быть выполнением foreach, правильно?

291
задан Jon Galloway 25 March 2010 в 12:24
поделиться

2 ответа

Если вы не хотите выполнять SQL напрямую, вызов DeleteObject в цикле - лучшее, что вы можете сделать сегодня.

Однако вы можете выполнять SQL и при этом делать его полностью универсальным с помощью метода расширения, используя подход, который я описываю здесь .

Хотя этот ответ был для версии 3.5. Для 4.0 я бы, вероятно, использовал новый API ExecuteStoreCommand под капотом, вместо того, чтобы переходить к StoreConnection.

48
ответ дан 23 November 2019 в 01:40
поделиться

все хорошо, правда? Я могу абстрагироваться с помощью метода или помощника расширения , но где-то мы все еще собираемся делать foreach, верно?

Ну, да, за исключением того, что вы можете превратить его в двухстрочный:

context.Widgets.Where(w => w.WidgetId == widgetId)
               .ToList().ForEach(context.Widgets.DeleteObject);
context.SaveChanges();
73
ответ дан 23 November 2019 в 01:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: