Apro la connessione nel costruttore. Considera questo codice:
public abstract class DataContext : DbContext, IDataContext
{
static DataContext()
{
if (DataContextConfiguration.UseSafePersian)
{
DbInterception.Add(new SafePersianInterceptor());
}
}
private readonly bool _saveChangesOnModify = false;
protected DataContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
this.OpenConnection();
}
internal void OpenConnection()
{
if (((IObjectContextAdapter)this).ObjectContext.Connection.State != ConnectionState.Open)
((IObjectContextAdapter)this).ObjectContext.Connection.Open();
}
}
Devo chiudere la connessione quando apro esplicitamente la connessione?
Io uso Entity Framework
versione 6.
AGGIORNARE
Ho ricevuto questo errore e succede molto spesso:
Timeout scaduto. Il periodo di timeout è trascorso prima di ottenere una connessione dal pool. Ciò potrebbe essere dovuto al fatto che tutte le connessioni in pool erano in uso e che è stata raggiunta la dimensione massima del pool.
Solitamente EF apre e chiude automaticamente le connessioni prima / dopo che un'operazione è stata completata. Tuttavia, se si apre una connessione manualmente, EF NON la chiuderà automaticamente al termine dell'operazione di database.
È consigliabile chiudere una connessione se non ne hai bisogno. È inoltre consigliabile che DbContext abbia una durata breve (se è possibile nel tuo scenario).
In ogni caso, la connessione verrà chiusa quando l'oggetto DbContext viene eliminato (ad esempio dal garbage collector). Ma dovresti chiuderlo non appena hai finito.
Per ulteriori informazioni sulla gestione della connessione EF, fare riferimento alla seguente pagina MSDN .