Я пытаюсь добавить несколько тысяч объектов, но у меня проблемы с производительностью.
Чтобы вставить 200 записей, нужны годы.
Вот логика:
private readonly ICrawlerRepository _crawlerRepository;
//...
using (var dbContextScope = _dbContextScopeFactory.Create())
{
var items = scanItemsToAdd.Skip(i).Take(200).ToList();
_crawlerRepository.AddScanItems(items);
dbContextScope.SaveChanges();
}
Вот слой репозитория
public class CrawlerRepository {
public void AddScanItems(ICollection<ScanItem> scanItems)
{
// Attempt to speed up the process, but don't make any difference ->
DbContext.Configuration.AutoDetectChangesEnabled = false;
foreach (var si in scanItems)
{
//gets "stuck" by running the following line
DbContext.Entry(si.ScanBase).State = EntityState.Unchanged;
DbContext.Entry(si.FileType).State = EntityState.Unchanged;
}
DbContext.ScanItems.AddRange(scanItems);
DbContext.Configuration.AutoDetectChangesEnabled = true;
}
}
Я что-то упустил? Цель этой вставки - добавить записи в базу данных независимо от реляционных таблиц, так как я делаю свои собственные проверки для добавляемых объектов, так что это должно быть довольно простым, если для свойства AutoDetectChangesEnabled установлено значение false.