Estoy en proceso de actualizar una aplicación de EF1 a EF4.1 Creé un DbContext y un conjunto de POCO utilizando las plantillas "ADO.NET DbContext Generator".DbContext ChangeTracking mata el rendimiento?
Cuando consulto el DbContext generado la parte de la base de datos de la consulta tarda 4ms en ejecutarse (validada con EF Profiler). Y luego toma el contexto unos 40 segundos (en palabras: ¡CUARENTA!) Para hacer lo que sea que haga antes de devolver el resultado a la aplicación.
EF1 maneja la misma consulta en menos de 2 segundos.
Desactivando AutoDetectChanges, LazyLoading y ProxyGeneration me gana 2-3 segundos.
Cuando uso el método de extensión AsNoTracking() puedo reducir el tiempo total de ejecución a aproximadamente 3 segundos.
Eso indica que ChangeTracking es el culpable.
Pero ChangeTracking es lo que necesito. Debo poder eventualmente persistir todos los cambios sin tener que seleccionar manualmente qué entidades fueron modificadas.
Alguna idea de cómo podría resolver ese problema de rendimiento?
Se discutió aquí varias veces. Parece un error en EFv4.1 –
Es aún peor cuando uso EF4.0 y la plantilla "ADO.NET POCO Entity Generator". Luego toma más de 80 segundos hasta que tenga algún resultado. ¿Entonces el error fue aún más severo con una versión anterior y MS no pudo arreglarlo correctamente en EF4.1? –
Puede intentar desactivar 'AutoDetectChanges'/usar' AsNoTracking' pero al mismo tiempo crear proxys de rastreo (todas las propiedades deben ser virtuales). Me pregunto si esta pista cambia o no y no puedo probarla yo mismo ahora. –