Domanda

Ho diversi metodi per gestire DB e tutti iniziano chiamando

FaierDbDataContext db = new FaierDbDataContext();

Poiché l'oggetto LinC2Sql DataContext implementa IDisposable, questo dovrebbe essere usato con " usando " ;?

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

Quali sono le implicazioni nell'usarlo in un modo o nell'altro?

È stato utile?

Soluzione

  

A differenza della maggior parte dei tipi che implementano   IDisposable, DataContext no   ho davvero bisogno di smaltire - almeno no   nella maggior parte dei casi. Ho chiesto a Matt Warren   su questa decisione di progettazione, e qui   fu la sua risposta:

     

Ci sono alcuni motivi che abbiamo implementato   IDisposable:

     
      
  • Se la logica dell'applicazione deve rimanere su un'entità oltre quando il   DataContext dovrebbe essere utilizzato o   valido puoi far rispettare quel contratto entro   chiamando Dispose. Caricatori differiti in   quell'entità farà ancora riferimento   DataContext e proverà a usarlo   se qualche codice tenta di navigare in   proprietà differite. Questi tentativi   avrà esito negativo. Dispose forza anche il   DataContext per scaricare la sua cache di   entità materializzate in modo che un singolo   l'entità memorizzata nella cache non verrà accidentalmente   mantenere vive tutte le entità materializzate   attraverso quel DataContext, che sarebbe   altrimenti causa ciò che sembra essere un   perdita di memoria.
  •   
  • Può essere la logica che chiude automaticamente la connessione DataContext   indotto a lasciare la connessione   Aperto. DataContext si basa su   codice dell'applicazione che elenca tutto   risultati di una query da quando è arrivato   la fine di un gruppo di risultati attiva il   connessione da chiudere. Se la   l'applicazione utilizza IEnumerable   Metodo MoveNext anziché foreach   in C # o VB, puoi uscire   l'enumerazione prematuramente. Se tuo   l'applicazione presenta problemi con   le connessioni non si chiudono e tu   sospettare il comportamento di chiusura automatica   non funziona è possibile utilizzare il Dispose   modello come soluzione.
  •   

dalla fonte

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top