2011-08-24 9 views
8

Tengo problemas con Entity Framework y varios hilos y me pregunto si existe una solución que mantenga la capacidad de carga lenta. Desde mi punto de vista, el contexto de datos no es seguro para subprocesos y por eso cuando tengo varios subprocesos usando el mismo contexto de datos recibo varios errores en los lectores de datos. La solución a este problema es usar un contexto de datos separado para cada conexión a la base de datos y luego destruir el contexto de datos. Lamentablemente, la destrucción de mi contexto de datos me impide realizar cargas perezosas.Entity Framework + Multiple Threads + Lazy Load

¿Existe un patrón que me permita tener un contexto compartido en mi aplicación, pero aún manejar correctamente varios hilos?

+0

Hemos tenido problemas similares al usar Parallel.ForEach en combinación con la carga diferida de EF. – tjrobinson

Respuesta

9

No, no hay tal solución. Sus opciones en la aplicación de varias hebras son:

  • Contexto por hilo
  • contexto individual producir unproxied entidades separadas (sin carga diferida, no hay cambio de seguimiento) con la sincronización para cada acceso a ese contexto.

Hacer la segunda aproximación con entidades adjuntas sustituidas es una gran catástrofe. Requeriría detectar todas las interacciones ocultas con el contexto y hacer que el código relacionado también esté sincronizado. Es probable que finalice con el proceso de un solo subproceso que se ejecuta en varios subprocesos de conmutación.

+0

+1 porque esto es técnicamente correcto, pero: Compartir un contexto en una aplicación completa es un problema incluso con un solo hilo. El contexto debe ser una unidad de trabajo y de corta vida. –

+0

@ Craig: Eso es correcto. No me refería a una instancia de contexto para toda la aplicación, sino a un contexto para múltiples hilos que trabajan en una sola "operación lógica". No estoy seguro si todavía es una unidad de trabajo si las entidades deben ser separadas. –

+0

Gracias. Eso es lo que pensé que sería la respuesta. –