У нас есть задача вставить около 5000 записей в таблицу SQL. Первоначально мы прошли через EF и здесь пример кодаКакой я должен выбрать Entity Framework или ADO.Net?
foreach (var BCol in batchCollectionoutput1)
{
var context1 = new TestENTITIES.TestDbContext();
context1.Database.CommandTimeout = 6000;
context1.Configuration.AutoDetectChangesEnabled = false;
context1.Configuration.ValidateOnSaveEnabled = false;
foreach (TestENTITIES.Output1 test in BCol)
context1.Output1.Add(test);
context1.SaveChanges();
}
это занимает 43412 миллисекунд
, после чего мы хотели, чтобы проверить с помощью SQL Bulk метода
using (SqlConnection sourceConnection = new SqlConnection(srcConnectionString))
{
SqlCommand myCommand1 = new SqlCommand("SELECT TOP 1000 * FROM input", sourceConnection);
sourceConnection.Open();
SqlDataReader reader1 = myCommand1.ExecuteReader();
using (SqlConnection destinationConnection = new SqlConnection(destConnectionString))
{
destinationConnection.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection.ConnectionString))
{
bulkCopy.BatchSize = 500;
bulkCopy.NotifyAfter = 1000;
bulkCopy.DestinationTableName = "Output1";
bulkCopy.WriteToServer(reader1);
}
reader1.Close();
}
}
копии, которая принимает только 1124 миллисекунд ..
что-то, что мы делаем неправильно в методе структуры Entity? Просьба сообщить
Вы можете поместить 'context1.SaveChanges()' после цикла 'foreach'. –
Как и ожидалось, EF не предназначен для обработки массовых операций. Однако есть расширения, которые вы можете установить, которые обрабатывают его: https://efbulkinsert.codeplex.com/ – Magnus