2008-11-11 21 views
6

Estoy pensando que sería inteligente configurar el contexto del objeto Entity en Application_BeginRequest, almacenarlo en Request.items, usarlo durante toda la solicitud y disponerlo en Application_EndRequest. De esta forma, el contexto siempre está disponible y puedo navegar por el gráfico del objeto de Entity Framework en mis vistas, cargando lo que no he ansiado hasta ahora.ASP.NET MVC con Entity Framework

Creo que esto lo haría como desarrollar en Ruby on Rails.

Podría ser que se debe tirar por hablar como una herejía, pero es tan alocado que posiblemente funcionará :)

no puedo conseguir Application_BeginRequest y ..EndRequest al fuego en ASP.NET MVC sin embargo. ¿No están despedidos? ¿Algún truco especial que deba hacer?

Respuesta

5

La versión 1.0 de ASP.NET MVC me permite conectar manejadores de eventos tanto en beginrequest como en endrequest, renovando un SessionScope y almacenándolo en HttpContext.Items en beginrequest (Cambié a Castle ActiveRecord) y en endrequest I saca el sessionscope de HttpContext.Items y deséchalo. Esto permite la carga diferida a lo largo del ciclo de vida de la solicitud. (Incluso puede navegar el gráfico de objetos en las vistas.)

5

El contexto del objeto en EF, como el contexto de datos en L2S, está diseñado como una "unidad de trabajo", no son seguros para subprocesos y no están diseñados para durar mucho tiempo.

En MVC, la mejor estrategia es crear una en el constructor del controlador (implícita o explícitamente, no importa) y luego eliminarla en el método Dispose. Por supuesto, EF no hace cargas flojas, por lo que tendrás que encontrar tu propio camino para ser flojo. :)

+3

No, este es un mal enfoque. Hace que el Controlador sea difícil de probar y también significa que la unidad de trabajo no está disponible fuera del Controlador. El patrón de sesión por solicitud mencionado a continuación es mejor. EF v1 admite carga diferida; solo tiene que ser explícito. –

+0

Creo que no entiende lo que significa "carga lenta". EF le permite cargar relaciones con entusiasmo, pero no carga lenta. En cuanto a la capacidad de prueba, acepto que consumir directamente un contexto de objeto perjudica la capacidad de prueba, pero eso no tiene nada que ver con el uso de ctor/dispose. –

+0

LOL amigo. Solo tiene que ser "explícito" http://blogs.msdn.com/jkowalski/archive/2008/05/12/transparent-lazy-loading-for-entity-framework-part-1.aspx –

Cuestiones relacionadas