В моем приложении иногда необходимо сохранить 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;
}
}
Итак, мой вопрос: есть ли способ получить DbContext из DbSet? Мне не нравится делать его параметром - кажется, что это не должно быть лишним.