web-dev-qa-db-ja.com

EntityFrameworkで子オブジェクトを削除します

私はEFを使用していますが、これを行うと次のようになります。

            foreach (var reg in detail.Regs)
            {
                this.db.Regs.DeleteObject(reg);
            }

私はこれを得る:

Collection was modified; enumeration operation may not execute.

私がここで間違っているのは何ですか?

29
hminaya

その理由は、コンテキストからオブジェクトを削除すると、EFがアクティブにRegsナビゲーションプロパティカウントを更新するためです。これは、detail.Regsコレクションが変更されていることを意味します。 foreachループ。常に例外が発生します。

次のように、新しいコレクションオブジェクトを作成し、削除し続けることができます。

foreach (var reg in detail.Regs.ToList())
{
    this.db.Regs.DeleteObject(reg);
}

または、LINQ ForEachメソッドを使用してクリーンにすることもできます。

detail.Regs.ToList().ForEach(r => db.Regs.DeleteObject(r));
80
Morteza Manavi