если MyObjectType является объектом, сгенерированным linq, и эти объекты еще не связаны с контекстом данных, который вы можете вызвать
foreach( MyObjectType value in myList )
{
dataContext.MyObkectTypes.InsertOnSubmit(value);
}
dataContext.SubmitChanges();
Однако в настоящее время linq-to-sql не очень эффективен при массовых обновлениях. Если бы myList состоял из 1000 элементов, у вас было бы 1000 операторов вставки.
Для очень больших списков вы можете преобразовать List<MyObjectType> в xml и использовать возможность серверов sql для массовой вставки с использованием xml. Вы бы прикрепили хранимую процедуру сервера sql к контексту данных.
string xml = CreateInsertXml( myList );
dataContext.usp_MyObjectsBulkInsertXml(xml);
пример хранимой процедуры сервера sql для массовой вставки через xml
-- XML is expected in the following format:
--
-- <List>
-- <Item>
-- <PlotID>1234</PlotID>
-- <XValue>2.4</SmsNumber>
-- <YValue>3.2</ContactID>
-- <ResultDate>12 Mar 2008</ResultDate>
-- </Item>
-- <Item>
-- <PlotID>3241</PlotID>
-- <XValue>1.4</SmsNumber>
-- <YValue>5.2</ContactID>
-- <ResultDate>3 Mar 2008</ResultDate>
-- </Item>
-- </List>
CREATE PROCEDURE [dbo].usp_MyObjectsBulkInsertXml
(
@MyXML XML
)
AS
DECLARE @DocHandle INT
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @MyXML
INSERT INTO MyTable (
PlotID,
XValue,
YValue,
ResultDate
)
SELECT
X.PlotID,
X.XValue,
X.YValue,
X.ResultDate
FROM OPENXML(@DocHandle, N'/List/Item', 2)
WITH (
PlotID INT,
XValue FLOAT,
YValue FLOAT,
ResultDate DATETIME
) X
EXEC sp_xml_removedocument @DocHandle
GO
person
Robert Paulson
schedule
20.10.2008