2012-07-12 51 views
1

我正在使用實體框架項目,我需要通過ID批量更新記錄。該ID(即特定表的主鍵)可在運行時,我想更新在下面的查詢像所有記錄:通過ID實體框架批量更新

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

我遇到的問題是,我身邊有60K的ID(在最壞的情況),我將需要處理,我們的數據庫軟件(SQL Server 2008中)無法處理這個問題:

查詢處理器用盡了內部資源,無法 生成查詢計劃。這是一件罕見的事情,只有在引用非常大的 數量的表或分區時纔會出現極其複雜的查詢或查詢。請簡化查詢。如果您 認爲您錯誤地收到了此消息,請聯繫客戶支持服務 以獲取更多信息。

通過谷歌搜索,我發現用老派DataTableSqlDataAdapter電話的人做到這一點,但我想留下來,如果可能的實體框架,或在必要時原始SQL的精神內。有沒有辦法以合理有效的方式做到這一點?

回答

2

EF不直接支持批量更新,因此您必須使用直接SQL。你最好的選擇是帶有你的ID的表值參數的存儲過程。 EF不支持表值參數,因此您必須直接使用ADO.NET。

只有將您的ID分成更小的組,然後分別爲每個子集執行更新,才能改進您當前的解決方案。

+0

我最終分成批次,將ID列表作爲CSV字符串傳遞給存儲過程。我不喜歡在查詢中解析,但事實證明這是一種非常乾淨的方式。 – Jake 2012-09-17 11:31:56