Можете ли вы получить DbContext из DbSet?

В моем приложении иногда необходимо сохранить 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? Мне не нравится делать это параметром - такое ощущение, что это не нужно.

Ответы на вопрос(4)

Ваш ответ на вопрос