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