Pregunta

Tengo varios métodos que tratan con la base de datos y todos comienzan por llamar

FaierDbDataContext db = new FaierDbDataContext();

Dado que el objeto Linq2Sql DataContext implementa IDisposable, ¿debería usarse con " utilizando " ;?

using (FaierDbDataContext db = new FaierDbDataContext()) {
    // use db here
}

¿Cuáles son las implicaciones de usarlo de una manera u otra?

¿Fue útil?

Solución

  

A diferencia de la mayoría de los tipos que implementan   IDisponible, DataContext no   Realmente necesito disponer, al menos no   en la mayoría de los casos. Le pregunte a Matt Warren   sobre esta decisión de diseño, y aquí   fue su respuesta:

     

Hay algunas razones por las que implementamos   IDisponible:

     
      
  • Si la lógica de la aplicación necesita aferrarse a una entidad más allá de cuando   Se espera que DataContext sea utilizado o   válido puede hacer cumplir ese contrato por   llamando a Disposición. Cargadores diferidos en   esa entidad seguirá haciendo referencia   El DataContext e intentará usarlo   si algún código intenta navegar por el   Propiedades diferidas. Estos intentos   fallará. Disponer también obliga al   DataContext para volcar su caché de   Entidades materializadas para que una sola.   entidad en caché no lo hará accidentalmente   mantener vivas todas las entidades materializadas   a través de ese DataContext, que haría   de lo contrario causar lo que parece ser una   pérdida de memoria.
  •   
  • La lógica que cierra automáticamente la conexión de DataContext puede ser   engañado para dejar la conexión   abierto. El DataContext se basa en el   código de aplicación enumerando todos   Los resultados de una consulta desde llegar a   el final de un conjunto de resultados desencadena la   Conexión para cerrar. Si el   La aplicación utiliza IEnumerable   Método MoveNext en lugar de un foreach   declaración en C # o VB, puede salir   La enumeración prematuramente. Si tu   aplicación experimenta problemas con   las conexiones no se cierran y tu   Sospechar el comportamiento de cierre automático.   No está funcionando puedes usar el Dispose   patrón como un trabajo alrededor.
  •   

de la fuente

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