Расширения Entity Framework bulkinsert игнорирует установленное время ожидания - PullRequest
0 голосов
/ 18 января 2019

Мы пытаемся вставить большой набор данных (более 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();
    }
}
...