我的应用程序中有时需要一次性保存10,000行或更多行到数据库中。我发现简单地逐个迭代并添加每个项目可能需要多达半个小时。
但是,如果我禁用AutoDetectChangesEnabled,则只需大约5秒钟(这正是我想要的)
我正在尝试创建一个名为“AddRange”的扩展方法,将其添加到DbSet中,该方法将禁用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?我不喜欢把它作为参数 - 感觉应该是不必要的。
Context
了:var context = myDbSet.GetService<ICurrentDbContext>();
- Felix