LINQ to SQL从.NET插入大对象

时间:2009-03-13 09:34:15

标签: .net linq linq-to-sql

使用LINQ to SQL将具有100,000条记录的列表对象的最快方法用于SQL?

4 个答案:

答案 0 :(得分:3)

对于海量数据,最快的方式是使用SqlBulkCopy之类的东西将数据(通过精心设计的IDataReader)推送到临时表(相同的布局,但是没有索引/ etc) - 然后使用SqlCommand执行存储过程以将数据从登台表推送到真实表中。但请注意,此处不涉及LINQ-to-SQL(除非您使用它来调用存储过程)。

您可以尝试使用常规LINQ-to-SQL InsertOnSubmit - 在尝试优化数据量之前评估数据量有多大问题;即使次优,它也可能“足够快”。

您可以相当轻松地创建IDataReader;我经常在here使用csv。要从列表中创建一个,您可以从here借用SimpleDataReader并覆盖DoRead

答案 1 :(得分:1)

你可以:

MyContext.Items.InsertAllOnSubmit( 
    from i in list
    select new Item
    {
       //map properties
    });

聚苯乙烯。没有尝试插入那么多数据

答案 2 :(得分:0)

LINQ2SQL不支持批量插入。看看运行自己的SQL,或使用另一个支持它的框架(我记得实体框架确实如此,但我无法确定)。

答案 3 :(得分:0)

您可能希望准确指定100,000条记录来源的来源。

如果要从非数据库源检索记录,我知道插入记录的最快方法是使用InsertAllOnSubmit方法。当然,这意味着交易中有100,000个插入语句,但没有进一步的细节,在这个问题上没有多少选择。

如果要从数据库中检索记录,则在调用存储过程时性能会更好。例如,在您的存储过程中:

INSERT INTO TableA
SELECT * FROM TableB

然后,使用LINQ调用存储过程。