Отключить отслеживание изменений EF для любого экземпляра контекста

У меня есть контекст для базы данных только для чтения для отчетов, и я пишу много кода, например:

using (var context = new ReportingContext())
{
    var reportXQuery = context.ReportX.AsNoTracking();

    // Do stuff here with query...
}

Есть ли способ установить бит AsNoTracking, чтобы просто newвыполнение ReportingContext выше автоматически использовало AsNoTracking вместо того, чтобы помнить, что нужно явно вызывать его при каждом запросе?


person Karl Anderson    schedule 20.09.2013    source источник


Ответы (1)


Попробуйте изменить конструктор контекста на это:

public ReportingContext()
{
this.Configuration.AutoDetectChangesEnabled = false;
}

ИЗМЕНИТЬ:

В конце концов, это вам не поможет, как указано в блоге Артура, его можно использовать только в определенных сценариях:

http://blog.oneunicorn.com/2012/03/12/secrets-of-detectchanges-part-3-switching-off-automatic-detectchanges/

person Admir Tuzović    schedule 20.09.2013
comment
Не могли бы вы немного рассказать о разнице между AutoDetectChangesEnabled = false и AsNoTracking? - person Gert Arnold; 21.09.2013
comment
На самом деле, прочитав ветку в комментарии выше, кажется, что мой ответ вам мало чем поможет. Я был уверен, что этот параметр конфигурации влияет на отслеживание изменений в глобальном масштабе, но, похоже, он не влияет на него так, как вы этого хотите. Извини :) - person Admir Tuzović; 21.09.2013
comment
Установка AutoDetectChangesEnabled на false... Он просто отключает автоматический вызов DetectChanges stackoverflow.com/questions/16863382/ - person Jaider; 12.09.2016