Condividi tramite


Procedura: utilizzare EntityConnection con un contesto dell'oggetto (Entity Framework)

In questo argomento viene illustrato un esempio di come fornire un oggetto EntityConnection esistente per il contesto dell'oggetto. Per ulteriori informazioni, vedere Gestione del contesto dell'oggetto (Entity Framework).

L'esempio incluso in questo argomento è basato sul modello descritto in Modello Sales di AdventureWorks (EDM). Per eseguire il codice incluso in questo esempio, è necessario avere già aggiunto il modello Sales di AdventureWorks al progetto e avere configurato il progetto per l'utilizzo di Entity Framework. A tale scopo, completare la procedura descritta in Procedura: utilizzare la procedura guidata Entity Data Model (Entity Framework).

Esempio

In questo esempio viene creato un oggetto EntityConnection, che viene passato nel costruttore di un oggetto ObjectContext con esecuzione prolungata. La connessione viene aperta manualmente. Entrambi gli oggetti ObjectContext di EntityConnection vengono eliminati manualmente.

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

' Create an EntityConnection.
Dim conn As New EntityConnection("name=AdventureWorksEntities")

' Create a long-running context with the connection.
Dim advWorksContext As New AdventureWorksEntities(conn)

Try
    ' Explicitly open the connection.
    If Not conn.State = ConnectionState.Open Then
        conn.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 and the connection. 
    advWorksContext.Dispose()
    conn.Dispose()
End Try
// Define the order ID for the order we want.
int orderId = 43661;

// Create an EntityConnection.
EntityConnection conn =
    new EntityConnection("name=AdventureWorksEntities");

// Create a long-running context with the connection.
AdventureWorksEntities advWorksContext =
    new AdventureWorksEntities(conn);

try
{
    // Explicitly open the connection.
    if (conn.State != ConnectionState.Open)
    {
        conn.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 and the connection. 
    advWorksContext.Dispose();
    conn.Dispose();
}

Vedere anche

Attività

Procedura: gestire la connessione in un contesto dell'oggetto con esecuzione prolungata (Entity Framework)
Procedura: aprire manualmente la connessione dal contesto dell'oggetto (Entity Framework)