Administrar conexiones en Servicios de objeto (Entity Framework)
De forma predeterminada, Servicios de objeto administra la conexión con la base de datos. Abre las conexiones sólo cuando se requieren, por ejemplo para ejecutar una consulta o llamar a SaveChanges. A continuación, Servicios de objeto cierra la conexión cuando la operación se ha completado.
Al llamar a cualquiera de los métodos siguientes, se abre la conexión:
SaveChanges o Refresh en ObjectContext.
FirstOrDefault o First en ObjectQuery.
Load en EntityCollection.
Load en EntityReference.
Cualquier método de Language-Integrated Query (LINQ) del generador de consultas ObjectQuery, como Where, OrderBy o Select.
Nota Cuando se llama a un método de consulta, se abre la conexión y sigue estando abierta hasta que ObjectResult se haya consumido completamente o eliminado.
Servicios de objeto expone el elemento EntityConnection por medio de la propiedad Connection. Esto le permite administrar la conexión y las transacciones, o proporcionar su propia EntityConnection. Resulta útil si desea mantener abierta una conexión dentro de un contexto del objeto de corta duración para mejorar el rendimiento o controlar las transacciones explícitamente. La misma conexión de proveedor utilizada por Entity Framework se puede compartir con otras partes de una aplicación.
Al administrar las conexiones deben tenerse en cuenta las consideraciones siguientes:
El contexto del objeto abrirá la conexión si no está ya abierta antes de una operación. Si el contexto del objeto abre la conexión durante una operación, siempre la cerrará cuando la operación se complete.
Si abre la conexión manualmente, el contexto del objeto no la cerrará. Al llamar a Close o Dispose, se cerrará la conexión.
Si el contexto del objeto crea la conexión, siempre se eliminará cuando se elimine el contexto.
En un contexto del objeto de ejecución prolongada, debe asegurarse de que se elimine el contexto cuando ya no se requiera.
Si proporciona la EntityConnection para el contexto del objeto, debe asegurarse de que se elimina.
En el ejemplo siguiente, se muestra cómo abrir explícitamente una conexión:
' Explicitly open the connection.
advWorksContext.Connection.Open()
// Explicitly open the connection.
advWorksContext.Connection.Open();
Para obtener más información, vea Cómo abrir manualmente la conexión desde el contexto del objeto (Entity Framework).
Cuando abre manualmente la conexión en un contexto del objeto de ejecución prolongada, debe llamar a Dispose para asegurarse de que la conexión se cierre cuando el contexto ya no se necesite. También puede llamar a Close en la EntityConnection para cerrar explícitamente la conexión. Para obtener más información, vea Cómo administrar la conexión en un contexto del objeto de larga duración (Entity Framework).
Servicios de objeto también permite crear una EntityConnection y proporcionar esta conexión al contexto del objeto. En este caso, puede abrir la conexión manualmente o permitir que el contexto del objeto la abra cuando lo necesite. Cuando proporcione EntityConnection el contexto del objeto, debe asegurarse de que el contexto y la EntityConnection se eliminan cuando ya no se requieren. En el ejemplo siguiente se crea una conexión y se pasa al contexto del objeto:
' 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);
Para obtener más información, vea Cómo usar EntityConnection con un contexto del objeto (Entity Framework).