Estoy usando LINQ to SQL en una biblioteca de objetos de acceso a datos. La biblioteca se usa en contextos web (aplicación web/servicio web) y no web (servicio de Windows). Inicialmente, almacené el DataContext
en el actual HttpContext
, ya que me permitió administrar una unidad de trabajo bastante pequeña (una solicitud web) y evitar objetos globales en una aplicación web. Obviamente, esto no funciona en un servicio de Windows.LINQ to SQL: ¿dónde vive su DataContext?
Rick Strahl tiene un buen artículo sobre la gestión de la vida útil de DataContext
: http://www.west-wind.com/weblog/posts/246222.aspx. Desafortunadamente, no puedo decidirme acerca del mejor enfoque. Un DataContext
global no funciona por las razones que menciona, un por-Thread DataContext
parece complicado y potencialmente más problemas de lo que vale, y una instancia por objeto parece quisquillosa: pierde un poco de elegancia cuando coloca el DataContext
utilizado para crear un DAO
a eso DAO
por lo que puede update
o delete
más tarde - sin mencionar, hay algo desagradablemente polla y huevo sobre la relación.
¿Alguien tiene experiencia personal que sugiera que un enfoque es mejor que otro? O mejor aún, ¿alguien tiene un cuarto o quinto enfoque que no estoy viendo? ¿Dónde está el mejor lugar para almacenar y administrar su DataContext
?
Según tengo entendido, usted todavía quiere un DataContext para administrar el ciclo de vida de una entidad para SubmitChanges() para que funcione correctamente sin volver a conectar su entidad. ¿Correcto? Obtener -> Editar -> Enviar. En ese caso, su DataContext vive fuera del alcance del método y 'usar' es menos valioso. –
¿Has visto la implementación de la interfaz IDisposable en una clase DataContext generada? ¿Tienes? Verá que es bastante inútil. –
@Andrei Rinea: Si bien la implementación de Dispose en la clase generada puede ser "bastante inútil", la implementación en la clase base (DataContext) no lo es. –