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.
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

Adiciones de comunidad

Mostrar: