2011-08-26 32 views
2

我正在做一个大规模的导入,只做一个.SubmitChanges()只有1,000条记录。db InsertOnSubmit - 如何清除集合

实施例:以上

var targetRecord = new Data.User() { FirstName = sourceRecord.FirstName }; 
db.Users.InsertOnSubmit(record); 

是在一个循环中,用于从源数据库的每个记录。然后,后来......

if (i % 1000 == 0) { db.SubmitChanges(); } 

的问题是,项目的集合被插入不断越来越大,当我想清楚他们走出各自的SubmitChanges后();

我在找什么:

if (i % 1000 == 0) { db.SubmitChanges(); db.Dispose_InsertOnSubmit_Records(); } 

类似的东西。我也可以选择一个存储在本地变量中的数据记录列表,在提交更改后我会不断地重新实例化,但这就是更多的代码。

希望这是有道理的。谢谢!

回答

1

您可以在每个SubmitChanges后初始化一个新的DataContext。我不确定性能影响,但过去我做了类似的事情,没有任何问题。

我见过的唯一的其他解决方案是迭代你的改变并恢复它们。看起来前者似乎是一种更有效的方法。

0

好吧,海量和linq-to-sql不会在一起,恐怕。它只是不作批量处理。

如果你正在做的只是一个直接导入(你的例子表明),你使用SqlBulkCopy更好。这是幅度更快。还有更多的代码,但如果你正在寻找速度,没有更好的解决方案。