Entity Framework で複数の行を削除する方法 (foreach なし) 質問する

Entity Framework で複数の行を削除する方法 (foreach なし) 質問する

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よね?

ベストアンサー1

EntityFramework 6 では、これが少し簡単になりました.RemoveRange()

例:

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

警告! 大規模なデータセットではこれを使用しないでください。

EF はすべてのデータをメモリに取り込み、その後削除します。データ セットが小さい場合は問題にならないかもしれませんが、非常に小さな変更のみを行うことが保証されない限り、通常はこの形式の削除は避けてください。

EF が指定したすべてのデータを削除目的で取得している間に、プロセスがメモリ不足に陥ってしまう可能性が高くなります。

おすすめ記事