2017-08-08 14 views
-3

いくつかのボタンをクリックするといくつかの条件に基づいていくつかのレコードを削除したいと思います。 これらのレコードだけを削除した後、私は新しいデータを挿入します。RemoveAllはレコードを削除しません

dbContext.AdviserFeeDetailReports.AsEnumerable().ToList() 
    .RemoveAll(x => x.PracticeId == superFund.CompanyID 
      && x.SuperFundId == superFund.SuperFundId); 

dbContext.SaveChanges(); 

なぜ私はテーブルから関連するレコードを削除しないのだろうと思います。例外は発生せず、2行以上が実行されます。しかし、レコードはデータベースと同様にDbContextにも存在します。

+1

なぜこれらを追加しますか? * .AsEnumerable()。ToList()* – Robert

+1

'AsEnumerable'を呼び出すと、完全なデータをメモリに入れて、データをすべてローカルに変更します。 – HimBromBeere

+0

リストを列挙できるようにする。それ以外の場合、RemoveAll()メソッドは使用できません。私はAsEnumerable()を使わず、ToList()だけで試してみました。それはどちらもうまくいかなかった – ashani123

答えて

13

AdviserFreeDetailReportsからではなく、リストから削除しています。また、AsEnumerable()ToList()というコールは、データベースからテーブル全体を取り出し、別のListにデータを格納します。

私はあなたのコードは、この方法より効率的になると信じて:

var toRemove = dbContext.AdviserFeeDetailReports 
    .Where(x => 
     x.PracticeId == superFund.CompanyID && 
     x.SuperFundId == superFund.SuperFundId); 

dbContext.AdviserFreeDetailReports.RemoveRange(toRemove); 

dbContext.SaveChanges(); 

この実装は削除する予定のオブジェクト、およびそれらを追跡DbContext開始を引っ張ります。 RemoveRangeを呼び出すと、各オブジェクトが削除対象としてマークされます。最後に、SaveChangesは最終的にデータベーステーブルからすべての選択されたオブジェクトを削除するステートメントをDELETEで発行します。

関連する問題