Pregunta

Ha habido muchas preguntas sobre la gestión de EntityContext vida,

por ejemplo. Crear instancias de un contexto en LINQ a Entidades

he llegado a la conclusión de que el contexto entidad debe ser considerada como una unidad de trabajo-de-y por lo tanto no se reutiliza. Gran.

Sin embargo, mientras se hace un poco de investigación para acelerar el acceso a mi base de datos, me encontré con este post ...

Mejora del rendimiento Entidad marco

El puesto argumenta que los EF de bajo rendimiento en comparación con otros marcos es a menudo debido a la EntityConnection objeto que se crea cada vez que un nuevo EntityContext se necesita objeto.

Para probar esta creé manualmente un EntityConnection estática en Global.asax.cs Application_Start ().

Me convierte entonces toda mi contexto usando declaraciones a

using( MyObjContext currContext = new MyObjeContext(globalStaticEFConnection)
{
   ....
}

Esto parece haber acelerado un poco las cosas sin ningún error hasta ahora en lo que puedo decir.

Pero, ¿es seguro?

¿El uso de una estática applicationwide EntityConnection introducir condiciones de carrera?

Saludos cordiales, Kervin

¿Fue útil?

Solución

EntityConnection se documenta a no ser flujos seguros . Creo que se podría unir ellos, pero no se puede utilizar una única conexión, estática para una aplicación web, ya que habrá muchos temas involucrados.

Otros consejos

  • Si su contexto EF es de aplicación en todo, tenga en cuenta que el usuario A ha hecho cambios (no comprometidos) y el usuario B ha cometido sus cambios, todos los cambios se consiguen comprometido con la base de datos ya que tanto el usuario A y B utilizan el misma instancia

  • En mi proyecto, hice un intance por WebRequest del contexto EF - es decir. un objeto de contexto es estática desde el principio a través final de una petición web y todas las operaciones en que el trabajo petición con el mismo contexto EF. Esto ha acelerado significativamente mi procesamiento sin el problema antes mencionado.

Una forma de implementar esto es utilizar un recipiente DI (estoy usando Unidad) para gestionar el tiempo de vida del contexto EF. El gestor de peticiones de por vida por web no se da fuera de la caja de la unidad, pero hay un montón de artículos hacia fuera allí que muestran cómo se puede hacer esto.

HTH.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top