Freigeben über


ObjectContext.Refresh Methode

Definition

Aktualisiert bestimmte Objekte im Objektkontext mit Daten aus der Datenquelle.

Überlädt

Refresh(RefreshMode, IEnumerable)

Aktualisiert eine Auflistung von Objekten im Objektkontext mit Daten aus der Datenquelle.

Refresh(RefreshMode, Object)

Aktualisiert ein Objekt im Objektkontext mit Daten aus der Datenquelle.

Hinweise

Die Reihenfolge, in der Objekte aktualisiert werden, ist nicht deterministisch.

Refresh(RefreshMode, IEnumerable)

Aktualisiert eine Auflistung von Objekten im Objektkontext mit Daten aus der Datenquelle.

public:
 void Refresh(System::Data::Objects::RefreshMode refreshMode, System::Collections::IEnumerable ^ collection);
public void Refresh (System.Data.Objects.RefreshMode refreshMode, System.Collections.IEnumerable collection);
member this.Refresh : System.Data.Objects.RefreshMode * System.Collections.IEnumerable -> unit
Public Sub Refresh (refreshMode As RefreshMode, collection As IEnumerable)

Parameter

refreshMode
RefreshMode

Ein RefreshMode-Wert, der angibt, ob Eigenschaftsänderungen im Objektkontext durch Eigenschaftswerte aus der Datenquelle überschrieben werden.

collection
IEnumerable

Eine IEnumerable-Auflistung von zu aktualisierenden Objekten.

Ausnahmen

collection ist null.

refreshMode ist nicht gültig.

collection ist leer.

- oder -

Ein Objekt ist nicht an den Kontext angefügt.

Hinweise

Diese Methode hat den doppelten Zweck, zu ermöglichen, dass Objekte im Objektkontext mit Daten aus der Datenquelle aktualisiert werden können, und als Mechanismus, mit dem Konflikte aufgelöst werden können. Weitere Informationen finden Sie unter Speichern von Änderungen und Verwalten von Parallelität.

Die Reihenfolge, in der Objekte aktualisiert werden, ist nicht deterministisch.

Nachdem Refresh aufgerufen wurde, werden die ursprünglichen Werte des Objekts immer mit dem Datenquellenwert aktualisiert, aber die aktuellen Werte werden möglicherweise mit dem Datenquellenwert aktualisiert. Dies ist abhängig vom RefreshMode-Wert. Der StoreWins Modus bedeutet, dass die Objekte in der Auflistung so aktualisiert werden müssen, dass sie mit den Datenquellenwerten übereinstimmen. ClientWins bedeutet, dass nur die Änderungen im Objektkontext beibehalten werden, auch wenn andere Änderungen in der Datenquelle vorgenommen wurden.

Um sicherzustellen, dass Objekte von der datenquellenseitigen Logik aktualisiert wurden, können Sie mit StoreWins aufrufenRefresh, nachdem Sie die SaveChanges -Methode aufgerufen haben.

Weitere Informationen

Gilt für:

Refresh(RefreshMode, Object)

Aktualisiert ein Objekt im Objektkontext mit Daten aus der Datenquelle.

public:
 void Refresh(System::Data::Objects::RefreshMode refreshMode, System::Object ^ entity);
public void Refresh (System.Data.Objects.RefreshMode refreshMode, object entity);
member this.Refresh : System.Data.Objects.RefreshMode * obj -> unit
Public Sub Refresh (refreshMode As RefreshMode, entity As Object)

Parameter

refreshMode
RefreshMode

Einer der RefreshMode-Werte, der den Modus zum Aktualisieren des ObjectStateManager angibt.

entity
Object

Das zu aktualisierende Objekt.

Ausnahmen

collection ist null.

refreshMode ist nicht gültig.

collection ist leer.

- oder -

Ein Objekt ist nicht an den Kontext angefügt.

Beispiele

In diesem Beispiel wird versucht, Änderungen zu speichern, was zu einem Parallelitätskonflikt führen kann. Anschließend wird gezeigt, wie der Parallelitätskonflikt gelöst wird, indem der Objektkontext aktualisiert wird, bevor die Änderungen erneut gespeichert werden.

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Perform an operation with a high-level of concurrency.
        // Change the status of all orders without an approval code.
        ObjectQuery<SalesOrderHeader> orders =
            context.SalesOrderHeaders.Where(
            "it.CreditCardApprovalCode IS NULL").Top("100");

        foreach (SalesOrderHeader order in orders)
        {
            // Reset the order status to 4 = Rejected.
            order.Status = 4;
        }
        try
        {
            // Try to save changes, which may cause a conflict.
            int num = context.SaveChanges();
            Console.WriteLine("No conflicts. " +
                num.ToString() + " updates saved.");
        }
        catch (OptimisticConcurrencyException)
        {
            // Resolve the concurrency conflict by refreshing the
            // object context before re-saving changes.
            context.Refresh(RefreshMode.ClientWins, orders);

            // Save changes.
            context.SaveChanges();
            Console.WriteLine("OptimisticConcurrencyException "
            + "handled and changes saved");
        }

        foreach (SalesOrderHeader order in orders)
        {
            Console.WriteLine("Order ID: " + order.SalesOrderID.ToString()
                + " Order status: " + order.Status.ToString());
        }
    }
    catch (UpdateException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Hinweise

Refresh hat den doppelten Zweck, ein Objekt mit Daten aus der Datenquelle zu aktualisieren und der Mechanismus zu sein, mit dem Konflikte gelöst werden können. Weitere Informationen finden Sie unter Speichern von Änderungen und Verwalten von Parallelität.

Die Reihenfolge, in der Objekte aktualisiert werden, ist nicht deterministisch.

Nachdem die Refresh Methode aufgerufen wurde, werden die ursprünglichen Werte des Objekts immer mit dem Datenquellenwert aktualisiert, aber die aktuellen Werte werden möglicherweise mit dem Datenquellenwert aktualisiert. Dies ist abhängig vom RefreshMode. Der StoreWins Modus bedeutet, dass das Objekt so aktualisiert werden sollte, dass es den Datenquellenwerten entspricht. Der ClientWins Wert bedeutet, dass nur die Änderungen im Objektkontext beibehalten werden, auch wenn andere Änderungen an der Datenquelle vorgenommen wurden.

Um sicherzustellen, dass ein Objekt von der datenquellenseitigen Logik aktualisiert wurde, können Sie die Refresh Methode mit dem StoreWins Wert aufrufen, nachdem Sie die SaveChanges -Methode aufgerufen haben.

Weitere Informationen

Gilt für: