質問: Entity Framework Coreを使用してデータベースから複数の行を削除する必要があります。 このコードは機能しません: ``` foreach (var item in items) { myCollection.Remove(item); } ``` 最初のオブジェクトの後に "InvalidOperationException:コレクションが変更された;列挙操作が実行されない"というエラーが発生するためです。つまり、 **.Remove**は1つのオブジェクトのみを**削除し**ます。 Entity Framework Coreには**.RemoveRange**がありません。 **したがって** 、この操作の実行方法は**わかり**ません。 さまざまなデータベースプロバイダとの最大限の互換性を維持するために、私はcontext.Database.ExecuteSqlCommand( "physical_tableからの削除...")を呼び出さないことをお勧めします。適切な解決策はありますか?ありがとう!
回答: > 最初のオブジェクトの後に "InvalidOperationException:コレクションが変更された;列挙操作が実行されない"というエラーが発生するためです。つまり、.Removeは1つのオブジェクトのみを削除します。 > > これはEF Coreとは何の関係もなく、はい`.Remove()`は1つのオブジェクトだけを削除します。ただし、反復処理中のコレクションを変更しようとしています。これを行う方法はありますが、これは良いルートではありません。 > Entity Framework Coreには.RemoveRangeがありません。したがって、この操作の実行方法はわかりません。 > > EFコアで複数のレコードを削除するには、少なくとも2つの簡単な方法があります。また、EF Coreには`RemoveRange()`メソッドがあります。これは`DbSet`メソッドです(上記のコメントに記載されているAPIドキュメントを参照)。 カップルオプション: 1. `myCollection`が`DbSet`に属する型である場合、このような単純な呼び出しはこのトリックを行います: ``` _dbContext.MyEntities.RemoveRange(myCollection); _dbContext.SaveChanges(); ``` 2. 場合`myCollection`実際にあなたが照会エンティティのオフナビゲーションプロパティで、あなたが呼び出すことができます`.Clear()`代わりに反復して呼び出すのコレクションに`.Remove()` 。 ``` var myParentEntity = _dbContext.MyParentEntities .Include(x => x.MyChildrenEntities) .Single(x => x.Id == id); myParentEntity.MyChildrenEntities.Clear(); _dbContext.SaveChanges(); ``` また、上記でコメントしたように、あなたの質問にはたくさんの文脈がありません - より完全なコードが掲載されるべきです。私はあなたをEFコアで動かすために暗闇の中でいくつかのスタブを取っています!