クラスタ化インデックスで約5000行のテーブルを削除していますが、EFはそれを実行するのに約30秒かかります。生成されたSQLのログEntityFramework 6.0は、行ごとに1つのDELETEを生成します。
は、1つが、すべての行の削除やっている示しています
DELETE [dbo].[Table]
WHERE ([ColumnID] = @0)
だから、合計で5000件の取引があります。
バッチでSaveChanges()を呼び出そうとしましたが、これはパフォーマンスを大幅に向上させたり、上記の動作を変更していません。
//loop
{
//get batch
db.Table.RemoveRange(batch);
db.SaveChanges();
}
私は、行ごとに実行し削除コマンドのこの欠陥を指摘するいくつかの他の質問を見てきましたが、何の提案は、その後行われません。
は1コマンドあたりの実行EFを停止する方法はあります行?可能であればインラインSQLを避けたいと思います。
私はEntityFramework拡張ライブラリに関するいくつかの否定的なフィードバックを聞いたことがありますが、これを行ってしまえば、それはほんとうに高速でした。 私の場合、少なくとも - それは素晴らしい叫び声です! – FBryant87