Como ya lo indicó Ladislav en el comentario, debe deshabilitar la detección automática de cambios para mejorar el rendimiento:
context.Configuration.AutoDetectChangesEnabled = false;
Esta detección de cambios está habilitada de forma predeterminada en la DbContext
API.
La razón por la que se DbContext
comporta de manera tan diferente de la ObjectContext
API es que muchas más funciones de la DbContext
API llamarán DetectChanges
internamente que funciones de la ObjectContext
API cuando la detección automática de cambios está habilitada.
Aquí puede encontrar una lista de las funciones que llaman DetectChanges
por defecto. Son:
- Los
Add
, Attach
, Find
, Local
, o Remove
miembros deDbSet
- Los
GetValidationErrors
, Entry
, o SaveChanges
miembros deDbContext
- El
Entries
método enDbChangeTracker
Especialmente las Add
llamadas DetectChanges
que son responsables del bajo rendimiento que experimentó.
En contraste con esto, la ObjectContext
API llama DetectChanges
solo automáticamente en SaveChanges
pero no en AddObject
y los otros métodos correspondientes mencionados anteriormente. Esa es la razón por la que el rendimiento predeterminado de ObjectContext
es más rápido.
¿Por qué introdujeron esta detección automática de cambios predeterminada DbContext
en tantas funciones? No estoy seguro, pero parece que deshabilitarlo y llamar DetectChanges
manualmente en los puntos adecuados se considera avanzado y puede introducir fácilmente errores sutiles en su aplicación, así que utilícelo con cuidado .