LINQ to SQL вставка большого объекта из .NET - PullRequest
1 голос
/ 13 марта 2009

Какой самый быстрый способ получить объект списка с количеством записей 100 000 в SQL с использованием LINQ to SQL?

Ответы [ 4 ]

3 голосов
/ 13 марта 2009

Для массовых данных, самый быстрый способ - это использовать что-то вроде SqlBulkCopy, чтобы поместить данные (через специально созданный IDataReader) в промежуточную таблицу (та же схема, но без индексов / и т. д.), а затем используйте SqlCommand для выполнения хранимой процедуры, чтобы перенести данные из промежуточной таблицы в реальную таблицу. Но обратите внимание, что LINQ-to-SQL здесь не задействован (если только вы не используете его для вызова хранимой процедуры).

Вы можете попробовать просто использовать обычный LINQ-to-SQL InsertOnSubmit - оценить, насколько велика проблема с объемом данных, прежде чем пытаться его оптимизировать; это может быть «достаточно быстро», хотя и неоптимально.

Вы можете создать IDataReader довольно легко; Я часто использую CSV с здесь . Чтобы создать его из списка, вы можете позаимствовать SimpleDataReader из здесь и переопределить DoRead.

1 голос
/ 13 марта 2009

Вы могли бы:

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

Ps. Не пытался вставить столько данных, хотя

0 голосов
/ 13 марта 2009

Возможно, вы захотите точно указать, откуда исходит источник ваших 100 000 записей.

Если вы извлекаете записи из источника, не являющегося базой данных, самый быстрый способ, которым я знаю, чтобы вставить записи, это использовать метод InsertAllOnSubmit. Конечно, это означает, что в транзакции содержится 100 000 операторов вставки, но без дальнейших подробностей выбора нет.

Если вы извлекаете записи из базы данных, производительность будет выше, если вместо этого вы вызовите хранимую процедуру. Например, в вашей хранимой процедуре:

INSERT INTO TableA
SELECT * FROM TableB

Затем вы вызываете хранимую процедуру с помощью LINQ.

0 голосов
/ 13 марта 2009

LINQ2SQL не поддерживает пакетные вставки. Посмотрите, как работает ваш собственный SQL, или используйте другой фреймворк, который его поддерживает (я помню, что Entity Framework это делает, но я не уверен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...