1

ID でレコードをバッチ更新する必要がある Entity Framework プロジェクトを使用しています。ID (つまり、特定のテーブルの主キー) は実行時に利用できるので、次のクエリのようにすべてのレコードを更新したいと考えています。

UPDATE EntityTable
SET Column = @p0
WHERE EntityID IN '1,2,3,[...]'

私が直面している問題は、処理する必要がある約 60,000 の ID (最悪の場合) があり、データベース ソフトウェア (SQL Server 2008) がこれを処理できないことです。

クエリ プロセッサが内部リソースを使い果たし、クエリ プランを生成できませんでした。これはまれなイベントであり、非常に複雑なクエリ、または非常に多数のテーブルまたはパーティションを参照するクエリでのみ予想されます。クエリを簡略化してください。このメッセージを誤って受け取ったと思われる場合は、詳細についてカスタマー サポート サービスにお問い合わせください。

Google 検索を通じて、これを達成するために古い学校DataTableSqlDataAdapter呼び出しを使用している人を見つけましたが、可能であれば Entity Framework の精神、または必要に応じて生の SQL の範囲内にとどまりたいと思います。合理的に効率的な方法でこれを行う方法はありますか?

4

1 に答える 1

2

EFはバッチ更新を直接サポートしていないため、直接SQLを使用する必要があります。最良の選択は、IDを含むテーブル値パラメーターを使用したスト​​アドプロシージャです。EFはテーブル値パラメーターをサポートしていないため、ADO.NETを直接使用する必要があります。

現在のソリューションは、IDを小さなグループに分割し、サブセットごとに個別に更新を実行することによってのみ改善できます。

于 2012-07-12T09:07:25.723 に答える