Jak już wskazał Ladislav w komentarzu, musisz wyłączyć automatyczne wykrywanie zmian, aby poprawić wydajność:
context.Configuration.AutoDetectChangesEnabled = false;
To wykrywanie zmian jest domyślnie włączone w DbContextinterfejsie API.
Powodem, dla którego DbContextzachowuje się tak inaczej niż ObjectContextAPI, jest to, że o wiele więcej funkcji DbContextAPI będzie wywoływać DetectChangeswewnętrznie niż funkcje ObjectContextAPI, gdy włączone jest automatyczne wykrywanie zmian.
Tutaj znajdziesz listę tych funkcji, które są wywoływane DetectChangesdomyślnie. Oni są:
- Te
Add, Attach, Find, Local, lub Removeczłonków wDbSet
- Członkowie
GetValidationErrors, Entrylub SaveChangeswDbContext
EntriesMetoda naDbChangeTracker
Szczególnie Addpołączenia, DetectChangesktóre są odpowiedzialne za słabą wydajność, jakiej doświadczyłeś.
W przeciwieństwie do tego ObjectContextAPI wywołuje DetectChangestylko automatycznie, SaveChangesale nie w, AddObjecti inne odpowiednie metody wymienione powyżej. To jest powód, dla którego domyślna wydajność ObjectContextjest szybsza.
Dlaczego wprowadzili to domyślne automatyczne wykrywanie zmian DbContextw tak wielu funkcjach? Nie jestem pewien, ale wydaje się, że wyłączenie go i DetectChangesręczne wywoływanie we właściwych punktach jest uważane za zaawansowane i może łatwo wprowadzić subtelne błędy do twojej aplikacji, więc używaj go ostrożnie .