2011-03-09 117 views
5

我有一個包含230列和1200萬行的表。LINQ-to-Sql更新 - 性能問題

我需要更新EACH行的123個字段。

如果我嘗試使用LINQ-To-Sql執行此操作,則會得到System.OutOfMemory異常。

我知道如果禁用對象跟蹤,我不會收到OutofMemory錯誤。 但我認爲我不能執行更新,如果我禁用對象跟蹤。

更新它們的最佳方法是什麼?

+0

對於每一行,123字段的值是否會有所不同?他們可以用一些公式來計算嗎?換句話說,你可以使用單個SQL UPDATE語句來執行此操作嗎? – 2011-03-09 12:58:41

+0

我假設你在每一行都設置了相同的數據,因爲你無法在內存中保存這麼多對象?簡單的答案是使用存儲過程,並將其拖入您的EDML文件中。 – Paddy 2011-03-09 12:59:14

+7

230列聽起來可疑.... – 2011-03-09 12:59:28

回答

10

這不是一個適合LINQ到SQL的任務,或者坦率地說任何ORM。你不要想以這種方式通過網絡拖動那麼多的數據兩次;理想情況下應該用純TSQL編寫,如果需要結合其他來源的數據,可能需要使用批量插入/ SqlBulkCopy來填充單獨的表。

0

我肯定會建議你改變體系結構,將大表解耦爲幾個小表,並且絕對避免用於這些數據量的linq-to-sql。

以這種方式創建體系結構,即爲業務級別上的每個實體分配類,這些類將調用T-SQL查詢的存儲過程來更新數據訪問級別上的數據。