2013-07-11 4 views
0

Я прочитал xml-файл с linq и создаю список объектов.Массовая вставка на SQL Server с linq

StringReader stream=new StringReader(xml); 
XmlTextReader reader=new XmlTextReader(stream); 

XElement req = XElement.Load(reader); 
var users= (req.Descendants("Report") 
      .Select(e => new { 
      Fname= e.Descendants("firstName").FirstOrDefault().Value, 
      Lname = e.Descendants("lastName").FirstOrDefault().Value, 
      personalId = e.Descendants("id").FirstOrDefault().Value, 
      })).ToList(); 

ценность пользователей включает в себя 100 000 объектов.

Я хочу, чтобы вставлять эти объекты в таблицу базы данных.

+5

Это хорошая идея. Если у вас есть проблемы, не стесняйтесь возвращаться и задавать конкретный вопрос. – nvoigt

+1

Массовая вставка в LINQ невозможна, вы должны отправить XML через хранимую процедуру и проанализировать ее в SP. В противном случае InsertOnSubmit будет потреблять много времени, потому что для каждой отдельной строки каждый вызов будет отправлен на SQL-сервер. –

ответ

1
public static void saveData<T>(ref List<T> list, string destinationTableName, int batchSize) 
{ 
    using (EntityDataReader<T> reader = new EntityDataReader<T>(list)) 
    using (System.Data.SqlClient.SqlBulkCopy sbc = new System.Data.SqlClient.SqlBulkCopy("your connection string")) 
    { 
     for (int i = 0; i < reader.FieldCount; i++) 
     { 
      string colName = reader.GetName(i); 
      sbc.ColumnMappings.Add(colName, colName); 
     } 
     sbc.BatchSize = batchSize; 
     sbc.DestinationTableName = destinationTableName; 
     sbc.WriteToServer(reader); 
    } 
} 

Я использую этот код для вставки очень большой список элементов, T должен быть известный объект сущности

Смежные вопросы