Share via


Cómo administrar la conexión en un contexto del objeto de larga duración (Entity Framework)

En este tema se proporciona un ejemplo de cómo abrir manualmente una conexión para un contexto del objeto de larga duración. En el ejemplo también se muestra cómo asegurarse de que la conexión se ha liberado llamando a Dispose en el contexto. Para obtener más información, vea Administrar el contexto del objeto (Entity Framework).

El ejemplo de este tema se basa en el Modelo AdventureWorks Sales (EDM). Para ejecutar el código de este ejemplo, debe haber agregado ya el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para usar Entity Framework. Para ello, complete el procedimiento de Cómo usar el Asistente para Entity Data Model (Entity Framework).

Ejemplo

En este tema se abre manualmente la conexión que usa un ObjectContext de larga duración y luego se ejecuta una consulta y se guardan los cambios. La conexión se cierra cuando el ObjectContext se elimina.

' Define the order ID for the order we want.
Dim orderId As Integer = 43661

' Create a long-running context.
Dim advWorksContext As New AdventureWorksEntities()
Try
    ' Explicitly open the connection.
    If Not advWorksContext.Connection.State = ConnectionState.Open Then
        advWorksContext.Connection.Open()
    End If

    ' Execute a query to return an order.
    Dim order As SalesOrderHeader = _
        advWorksContext.SalesOrderHeader.Where( _
        "it.SalesOrderID = @orderId", New ObjectParameter("orderId", orderId)) _
        .Execute(MergeOption.AppendOnly).First()

    ' Change the status of the order.
    order.Status = 1

    ' Save changes.
    If 0 < advWorksContext.SaveChanges() Then
        Console.WriteLine("Changes saved.")
    End If

    ' Load the order's items.
    order.SalesOrderDetail.Load()

    ' Delete the first item.
    advWorksContext _
        .DeleteObject(order.SalesOrderDetail.First())

    ' Save changes again.
    If 0 < advWorksContext.SaveChanges() Then
        Console.WriteLine("Changes saved.")
    End If
Catch ex As InvalidOperationException
    Console.WriteLine(ex.ToString())
Finally
    ' Explicitly dispose of the context, 
    ' which closes the connection. 
    advWorksContext.Dispose()
End Try
// Define the order ID for the order we want.
int orderId = 43661;

// Create a long-running context.
AdventureWorksEntities advWorksContext =
    new AdventureWorksEntities();
try
{
    if (advWorksContext.Connection.State != ConnectionState.Open)
    {
        // Explicitly open the connection.
        advWorksContext.Connection.Open();
    }

    // Execute a query to return an order.
    SalesOrderHeader order = 
        advWorksContext.SalesOrderHeader.Where(
        "it.SalesOrderID = @orderId", new ObjectParameter("orderId",orderId))
        .Execute(MergeOption.AppendOnly).First();

    // Change the status of the order.
    order.Status = 1;

    // Save changes.
    if (0 < advWorksContext.SaveChanges())
    {
        Console.WriteLine("Changes saved.");
    }

    // Load the order's items.
    order.SalesOrderDetail.Load();

    // Delete the first item.
    advWorksContext
        .DeleteObject(order.SalesOrderDetail.First());

    // Save changes again.
    if (0 < advWorksContext.SaveChanges())
    {
        Console.WriteLine("Changes saved.");
    }
}
catch (InvalidOperationException ex)
{
    Console.WriteLine(ex.ToString());
}
finally
{
    // Explicitly dispose of the context, 
    // which closes the connection. 
    advWorksContext.Dispose();
}

Vea también

Tareas

Cómo administrar la conexión en un contexto del objeto de larga duración (Entity Framework)
Cómo abrir manualmente la conexión desde el contexto del objeto (Entity Framework)