2008-12-16 18 views
9

Estoy usando ADO.NET EF en una aplicación MVC. Estoy considerando poner el ObjectContext dentro de HttpContext.Current para que toda la lógica en la misma solicitud pueda acceder sin tener que abrir/destruir cada vez. Sin embargo, estoy seguro de que es una buena forma de administrar las instancias de ObjectContext. Tengo 2 preguntas con respecto a esta necesidad:Administrar ADO.NET Entity Framework ObjectContext en ASP.NET MVC

  1. Como HttpContext.Current propiedad está respaldada por un campo local de subprocesos y ASP.NET utiliza hilos de la piscina para manejar las solicitudes, es posible que una instancia de ObjectContext puso en HttpContext ¿La solicitud actual será visible para una solicitud posterior que se ejecute en el mismo hilo del grupo?

  2. ¿Cómo crees que se debe gestionar ObjectContext en ASP.NET MVC para evitar la apertura/eliminación y evitar condiciones de carrera?

Respuesta

1

Estoy de acuerdo con Todd - uso DI/COI cotnainer (Unidad, Windsor) con cada subproceso (o costumbre per- solicitud) de por vida.

Ad 2, como recuerdo, en Linq a SQL, el objeto DataContext se consideraba un objeto liviano por lo que no debería ser un problema crearlo a menudo. Con suerte, es similar para EF.

2

me gustaría utilizar un contenedor IoC como StructureMap, Autofac, Windosor, etc.

5

Utilice Repository pattern. Anular controlador. Deseche el depósito, que a su vez dispone el DataContext.

0

Gracias por la sugerencia de IoC. Usé Unity e implementé un administrador de por vida por solicitud para almacenar/recuperar objetos a través de HttpContext.Current. Parece que funciona bien.

+0

¿Podría publicar el código para mostrar cómo agregó un objeto a HttpContext.Current? ¿Lo agregaste a la colección de Artículos, o ...? – Cynthia

+0

Este es el código en el administrador de por vida personalizado de Unity: HttpContext.Current.Items [key] = newValue –

2

Usar una sola ObjectContext por solicitud es una buena idea.

Si lo está manejando usted mismo, necesita poner el contexto en la colección HttpContext.Items. En EndRequest debe asegurarse de que el contexto esté dispuesto.

Como se mencionó, algunos frameworks de IoC son compatibles con este OTB, generalmente llamado PerRequest scope/lifetime.

Cuestiones relacionadas