在我的应用程序中,有时需要在一次操作中将 10,000 或更多行保存到数据库中。我发现一次简单地迭代和添加每个项目可能需要半个小时以上。
但是,如果我禁用 AutoDetectChangesEnabled 大约需要 5 秒(这正是我想要的)
我正在尝试为 DbSet 创建一个名为“AddRange”的扩展方法,该方法将禁用 AutoDetectChangesEnabled,然后在完成后重新启用它。
public static void AddRange<TEntity>(this DbSet<TEntity> set, DbContext con, IEnumerable<TEntity> items) where TEntity : class
{
// Disable auto detect changes for speed
var detectChanges = con.Configuration.AutoDetectChangesEnabled;
try
{
con.Configuration.AutoDetectChangesEnabled = false;
foreach (var item in items)
{
set.Add(item);
}
}
finally
{
con.Configuration.AutoDetectChangesEnabled = detectChanges;
}
}
所以,我的问题是:有没有办法从 DbSet 中获取 DbContext?我不喜欢把它作为参数——感觉它应该是不必要的。