Freigeben über


Gewusst wie: Verwalten der Verbindung in einem lang andauernden Objektkontext (Entity Framework)

In diesem Thema wird anhand eines Beispiel gezeigt, wie Sie die Verbindung für einen Objektkontext mit langer Laufzeit manuell herstellen können. Dieses Beispiel zeigt auch, wie Sie sicherstellen können, dass die Verbindung durch Abrufen von Dispose für den Kontext freigegeben wird. Weitere Informationen finden Sie unter Verwalten des Objektkontexts (Entity Framework).

Das Beispiel in diesem Thema beruht auf dem AdventureWorks Sales-Modell (EDM). Zum Ausführen des Codes in diesem Beispiel müssen Sie dem Projekt bereits das "AdventureWorks Sales"-Modell hinzugefügt haben und das Projekt zur Verwendung von Entity Framework konfiguriert haben. Führen Sie dazu das Verfahren in Gewusst wie: Verwenden des Assistenten für Entity Data Model (Entity Framework) aus.

Beispiel

In diesem Beispiel wird die von einem lang andauernden ObjectContext verwendete Verbindung manuell geöffnet, dann wird eine Abfrage durchgeführt, und die Änderungen werden gespeichert. Die Verbindung wird geschlossen, wenn der ObjectContext verworfen wird.

' 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();
}

Siehe auch

Aufgaben

Gewusst wie: Verwalten der Verbindung in einem lang andauernden Objektkontext (Entity Framework)
Gewusst wie: Manuelles Öffnen der Verbindung aus dem Objektkontext (Entity Framework)