如何在Entity Framework中删除多行(没有foreach)

entity-framework

我正在使用Entity Framework从表中删除多个项目。没有外键/父对象,因此我无法使用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,对吧?

一般承认的答案

如果你不想直接在循环中调用DeleteObject来执行SQL,那么今天你可以做到最好。

但是,您可以使用我在此处描述的方法,通过扩展方法执行SQL并使其完全通用。

虽然答案是3.5。对于4.0,我可能会使用新的ExecuteStoreCommand API,而不是下载到StoreConnection。


热门答案

EntityFramework 6使用.RemoveRange()更容易.RemoveRange()

例:

db.People.RemoveRange(db.People.Where(x => x.State == "CA"));
db.SaveChanges();



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因