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