1. ホーム
  2. entity-framework

[解決済み] Entity Frameworkで複数行を削除する方法(foreachを使用しない)

2022-03-15 20:46:20

質問

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を行うことになりますよね?

どのように解決する?

SQLを直接実行したくない場合は、ループ内でDeleteObjectを呼び出すことが、現在できる最善の方法です。

しかし、私が説明した方法を使えば、SQL を実行しながらも、拡張メソッドによって完全に汎用化することができます。 こちら .

ただし、この回答は3.5でのものです。4.0では、StoreConnectionまで落とすのではなく、新しいExecuteStoreCommand APIをフードで使用すると思います。