Недавно я модифицировал часть моего приложения, которое выполнялось очень медленно, отключив автоматическое обнаружение изменений (Context.Configuration.AutoDetectChangesEnabled = false
) перед выполнением массового удаления, затем повторно включив его и сохранив изменения.
Я прочитал несколько разных источников, объясняющих это, по сути, всякий раз, когда я вызываю методы типа .Add()
или .Remove()
на DbSet, вызывается DetectChanges()
, и это может стать дорогостоящим, когда мы имеем дело с партиями сущностей. OK.
Теперь я хочу обратить внимание на эти статьи, в частности:
Автоматическое обнаружение изменений Entity Framework (MSDN)
Альтернативой отключению и повторному включению является автоматическое обнаружение изменений, отключенных в любое время, и контекст вызова .ChangeTracker.DetectChanges явно или использовать прокси-серверы отслеживания изменений. Оба эти варианта продвинуты и могут легко вводить тонкие ошибки в ваше приложение, поэтому используйте их с осторожностью.
Секреты обнаружения изменений: Часть 3
Не отключайте автоматический DetectChanges, если вам действительно не нужно; это просто причинит вам боль.
Возможно, это передо мной, но, предположив, что, например, я обернул .SaveChanges()
в методе, который всегда назывался DetectChanges()
, во-первых, какие ошибки я мог бы начать сталкиваться с тем, что я обычно не буду? Все предупреждения, которые я вижу, просто смутно говорят о том, что плохие вещи могут произойти, не вникая в то, что они есть.