2011-03-09 158 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查询的存储过程来更新数据访问级别上的数据。