C # Linq-to-Sql - DataContext deve essere eliminato utilizzando IDisposable
-
03-07-2019 - |
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?
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