Freigeben über


ObjectContext.Refresh Methode

Definition

Aktualisiert bestimmte Objekte im Objektkontext mit Daten aus der Datenquelle.

Überlädt

Name Beschreibung
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 mit Eigenschaftswerten aus der Datenquelle überschrieben werden.

collection
IEnumerable

Eine IEnumerable Auflistung von Objekten, die aktualisiert werden sollen.

Ausnahmen

collection ist null.

refreshMode ist ungültig.

collection ist leer.

- oder -

Ein Objekt ist nicht an den Kontext angefügt.

Hinweise

Diese Methode hat den doppelten Zweck, es Objekten im Objektkontext zu ermöglichen, mit Daten aus der Datenquelle zu aktualisieren, und es handelt sich um den Mechanismus, mit dem Konflikte gelöst werden können.

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

Nach Refresh dem Aufruf werden die ursprünglichen Werte des Objekts immer mit dem Datenquellenwert aktualisiert, aber die aktuellen Werte werden möglicherweise oder nicht mit dem Datenquellenwert aktualisiert. Dies hängt vom Wert ab RefreshMode . Der StoreWins Modus bedeutet, dass die Objekte in der Auflistung aktualisiert werden sollen, um den Datenquellenwerten zu entsprechen. ClientWins bedeutet, dass nur die Änderungen im Objektkontext beibehalten werden, auch wenn andere Änderungen in der Datenquelle aufgetreten sind.

Um sicherzustellen, dass Objekte von datenquellenseitiger Logik aktualisiert wurden, können Sie nach dem Aufrufen der SaveChanges Methode aufrufen.RefreshStoreWins

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 angibt, welcher Modus für die Aktualisierung verwendet ObjectStateManagerwerden soll.

entity
Object

Das zu aktualisierende Objekt.

Ausnahmen

refreshMode ist ungültig.

Ein Objekt ist nicht an den Kontext angefügt.

Beispiele

In diesem Beispiel wird versucht, Änderungen zu speichern, und dies kann zu einem Parallelitätskonflikt führen. Anschließend wird gezeigt, wie der Parallelitätskonflikt behoben wird, indem der Objektkontext vor dem erneuten Speichern von Änderungen aktualisiert wird.

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 dualen Zweck, dass ein Objekt mit Daten aus der Datenquelle aktualisiert und der Mechanismus ist, mit dem Konflikte gelöst werden können.

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 oder nicht mit dem Datenquellenwert aktualisiert. Dies hängt von der RefreshMode. Der StoreWins Modus bedeutet, dass das Objekt aktualisiert werden soll, um den Datenquellenwerten zu entsprechen. Der ClientWins Wert bedeutet, dass nur die Änderungen im Objektkontext beibehalten werden, auch wenn in der Datenquelle andere Änderungen vorgenommen wurden.

Um sicherzustellen, dass ein Objekt von datenquellenseitiger 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: