Мы пытаемся вставить большой набор данных (более 2 миллионов записей) в нашу базу данных, используя массовую вставку Entity Framework.
Расширения: EntityFramework.BulkInsert.Extensions
(nuget EntityFramework.BulkInsert-ef6
) Версия 6.0.2.8.
Мы используем это следующим образом:
using (StockEntities context = new StockEntities())
{
var entities = AutoMapper.Mapper.Map<List<ImportLots>>(lots).ToArray();
context.BulkInsert(entities, new BulkInsertOptions { TimeOut = 1800 });
context.SaveChanges();
}
Однако примерно через 1 минуту время ожидания истекает.
Итак, чтобы исправить это, мы добавили размер пакета
using (StockEntities context = new StockEntities())
{
var entities = AutoMapper.Mapper.Map<List<ImportLots>>(lots).ToArray();
context.BulkInsert(entities, new BulkInsertOptions { TimeOut = 1800, BatchSize = 100000 });
context.SaveChanges();
}
Впрочем, без кубиков. Кажется, что BulkInsertOptions
игнорируется. кто-нибудь еще сталкивался с этим? И как лучше всего это исправить?
Редактировать : добавлено следующее только для проверки, однако, по-прежнему нет кубиков. Время ожидания истекает через 1 минуту.
context.Database.CommandTimeout = 1800;
Редактировать : преобразовал код в следующий, и это, кажется, работает, поэтому кажется, что BulkInsertOptions игнорируются
using (StockEntities context = new StockEntities())
{
context.Database.CommandTimeout = 1800;
var entities = AutoMapper.Mapper.Map<List<ImportLots>>(lots).ToArray();
int batches = entities.Count() / 100000;
for(int i = 0; i < batches; i++)
{
context.BulkInsert(entities.Skip(i * 100000).Take(100000), new BulkInsertOptions { TimeOut = 1800});
context.SaveChanges();
}
}