Я удаляю несколько объектов из таблицы с помощью Платформы Объекта. Нет внешнего ключа / родительский объект, таким образом, я не могу обработать это с 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, правильно?
Если вы не хотите выполнять SQL напрямую, вызов DeleteObject в цикле - лучшее, что вы можете сделать сегодня.
Однако вы можете выполнять SQL и при этом делать его полностью универсальным с помощью метода расширения, используя подход, который я описываю здесь .
Хотя этот ответ был для версии 3.5. Для 4.0 я бы, вероятно, использовал новый API ExecuteStoreCommand под капотом, вместо того, чтобы переходить к StoreConnection.
все хорошо, правда? Я могу абстрагироваться с помощью метода или помощника расширения , но где-то мы все еще собираемся делать foreach, верно?
Ну, да, за исключением того, что вы можете превратить его в двухстрочный:
context.Widgets.Where(w => w.WidgetId == widgetId)
.ToList().ForEach(context.Widgets.DeleteObject);
context.SaveChanges();