Pregunta

¿Cuál es el mejor modelo de por vida para un DataContext?¿Debería crear uno nuevo cada vez que lo necesite (también conocido como nivel de función), debería mantener uno disponible en cada clase que lo usaría (nivel de clase), o debería crear una clase estática con un DataContext estático (dominio de aplicación? nivel)?¿Se consideran mejores prácticas al respecto?

¿Fue útil?

Solución

Es prácticamente necesario mantener el mismo contexto de datos disponible durante toda la vida útil de las operaciones que desea realizar si alguna vez va a almacenar los cambios que se van a realizar. .SubmitChanges()'d más tarde, de lo contrario perderá esos cambios.

Si solo estás consultando cosas entonces está bien crearlas según sea necesario, pero si luego quieres .SubmitChanges() Tendrás que refactorizar mucho tu código, por lo que también puedes adoptar el patrón de mantener el código de manera efectiva. datacontext global en toda su aplicación desde el principio.

Tenga en cuenta que el contexto de los datos es desconectado.La conexión sólo se realiza cuando los datos de la consulta son enumerado (no cuando ejecuta la consulta por primera vez, es un tipo de datos "perezoso", por lo que solo proporciona datos cuando es necesario), y luego se cierra inmediatamente después.En .SubmitChanges() la conexión se abre para enviar los cambios y luego se cierra inmediatamente después.Así que no pienses en mantener el datacontext alrededor mantiene una conexión abierta, no es así (puedes conectar el StateChange evento de la conexión para confirmarlo usted mismo, de eso estoy seguro).

Hay un gran artículo en Blog de Rick Strahl que cubre este tema en profundidad, ¡mucho más de lo que proporciona mi respuesta aquí!

Otros consejos

Creo que Jeff Atwood habló de esto en el Podcast del código de pastoreo, cuando le preguntaron exactamente lo mismo.Escúchelo durante los últimos 15 a 20 minutos aproximadamente.

Creo que en SO, el contexto de datos se crea en la clase Controlador.No estoy seguro de muchos detalles aquí.Pero eso es lo que parecía.

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