如何在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();


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因