Gestione di connessioni in Object Services (Entity Framework)
Per impostazione predefinita, la connessione al database viene gestita da Object Services. Le connessioni vengono aperte solo quando necessario, ad esempio per eseguire una query o per chiamare SaveChanges. La connessione viene quindi chiusa da Object Services dopo il completamento dell'operazione.
Se si chiama uno dei metodi seguenti viene aperta la connessione:
SaveChanges o Refresh su ObjectContext.
FirstOrDefault o First su ObjectQuery.
Load su EntityCollection.
Load su EntityReference.
Qualsiasi metodo LINQ (Language Integrated Query) o metodo del generatore di query di ObjectQuery, ad esempio Where, OrderBy o Select.
Nota Quando viene chiamato un metodo di query, la connessione viene aperta e rimane aperta fino a quando l'oggetto ObjectResult non è stato completamente utilizzato o eliminato.
Object Services espone l'oggetto EntityConnection tramite la proprietà Connection. Questo consente di gestire la connessione e le transazioni o di fornire un oggetto EntityConnection personalizzato. Ciò è utile quando si desidera mantenere aperta una connessione all'interno di un contesto dell'oggetto di breve durata per migliorare le prestazioni o per controllare in modo esplicito le transazioni. La stessa connessione al provider utilizzata da Entity Framework può essere condivisa con altre parti di un'applicazione.
Le considerazioni seguenti riguardano la gestione delle connessioni:
La connessione viene aperta dal contesto dell'oggetto, se non è già aperta prima di un'operazione. Se la connessione viene aperta dal contesto dell'oggetto durante un'operazione, viene sempre chiusa dopo il completamento dell'operazione.
Se si apre manualmente la connessione, questa non viene chiusa dal contesto dell'oggetto. Chiamando Close o Dispose la connessione viene chiusa.
Se la connessione viene creata dal contesto dell'oggetto, quando il contesto viene eliminato la connessione viene sempre eliminata.
In un contesto dell'oggetto con esecuzione prolungata, è necessario assicurarsi che il contesto venga eliminato quando non è più necessario.
Se si fornisce l'oggetto EntityConnection per il contesto dell'oggetto, è necessario assicurarsi che venga eliminato.
Nell'esempio seguente viene illustrato come aprire in modo esplicito una connessione.
' Explicitly open the connection.
advWorksContext.Connection.Open()
// Explicitly open the connection.
advWorksContext.Connection.Open();
Per ulteriori informazioni, vedere Procedura: aprire manualmente la connessione dal contesto dell'oggetto (Entity Framework).
Quando si apre manualmente la connessione in un contesto dell'oggetto con esecuzione prolungata, è necessario chiamare Dispose per assicurarsi che la connessione venga chiusa quando il contesto non è più necessario. È anche possibile chiamare Close su EntityConnection per chiudere in modo esplicito la connessione. Per ulteriori informazioni, vedere Procedura: gestire la connessione in un contesto dell'oggetto con esecuzione prolungata (Entity Framework).
Object Services consente inoltre di creare un oggetto EntityConnection e di fornire questa connessione al contesto dell'oggetto. In questo caso, è possibile aprire la connessione manualmente o consentire al contesto dell'oggetto di aprirla quando necessario. Quando si fornisce l'oggetto EntityConnection al contesto dell'oggetto, è necessario assicurarsi che sia il contesto che l'oggetto EntityConnection vengano eliminati quando non sono più necessari. Nell'esempio seguente viene creata una connessione, che viene passata al contesto dell'oggetto:
' Create an EntityConnection.
Dim conn As New EntityConnection("name=AdventureWorksEntities")
' Create a long-running context with the connection.
Dim advWorksContext As New AdventureWorksEntities(conn)
// Create an EntityConnection.
EntityConnection conn =
new EntityConnection("name=AdventureWorksEntities");
// Create a long-running context with the connection.
AdventureWorksEntities advWorksContext =
new AdventureWorksEntities(conn);
Per ulteriori informazioni, vedere Procedura: utilizzare EntityConnection con un contesto dell'oggetto (Entity Framework).