2010-11-02 15 views
8

Estoy utilizando entity framework 4 y creo un datacontext para el modelo en una de las clases base. Pero estaba haciendo un perfil y el contexto se está creando cada vez que intento consultar, así que pensé en hacerlo estático para que se cree una sola vez y se reutilice siempre.¿Los contextos de datos deben ser estáticos?

¿Cree que esta es la mejor manera de hacerlo y el contexto de datos/objetos siempre debe estar estático? ¿Hay alguna desventaja para hacerlo estático? ¿Deben los contextos de datos ser estáticos o no estáticos? Cualquier idea o sugerencia es bienvenida.

+0

Hay * MUCHAS * preguntas en SO con respecto a DataContext y ObjectContext Lifetimes. http://stackoverflow.com/search?q=Datacontext+lifetime –

+0

posible duplicado de [LinqToSql DataContext estático en una aplicación web] (http://stackoverflow.com/questions/940912/linqtosql-static-datacontext-in-a -Aplicación web) –

Respuesta

9

No. No siempre deben ser estáticos.

En realidad, se puede ejecutar en muchos más problemas con un contexto de datos estáticos en lugar del equivalente no estático (como múltiples usuarios de sesiones separadas que acceden al mismo contexto desde múltiples hilos).

No voy a entrar en la explicación detallada, ya que hay algunas muy buenas entradas de blog por ahí que cubren los detalles:

Linq to SQL DataContext Lifetime Management - Rick Strahl's Web Log (puede no parecer relevante, pero sigue siendo)

Making Entity Framework (v1) work, Part 1: DataContext Lifetime Management (para una posible alternativa si no le gusta la solución de Rick)

5

¿Los contextos de datos deben ser siempre estáticos?

No, deberían (casi *) Nunca sea estático. DataContext son baratos de crear porque están destinados a ser utilizados como una unidad de trabajo. Por lo tanto, debe tener un DataContext por "conversación" (lo que sea que signifique para su contexto).

*: La respuesta correcta es, probablemente, que nunca deben ser estáticos, pero siempre soy escéptico de los consejos de programación que siempre o nunca. Por lo tanto, este es un weenie meneo más que nada.

Cuestiones relacionadas