如何使用DbContextScopeFactory批量插入EF实体

时间:2019-01-10 16:22:23

标签: .net entity-framework

我正在尝试添加数千个实体,但是我遇到了性能问题。 插入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;
    }
}

我想念什么吗?此插入的目的是在我对要添加的实体进行自己的验证时,无论关系表如何,都将记录添加到db中,因此将AutoDetectChangesEnabled属性设置为false时,应该很简单。

0 个答案:

没有答案