ObjectContext.SaveChanges ObjectContext.SaveChanges ObjectContext.SaveChanges ObjectContext.SaveChanges Method

Definition

Speichert alle Aktualisierungen der Datenquelle permanent.Persists all updates to the data source.

Überlädt

SaveChanges() SaveChanges() SaveChanges() SaveChanges()

Speichert alle Aktualisierungen der Datenquelle permanent und setzt die Änderungsnachverfolgung im Objektkontext zurück.Persists all updates to the data source and resets change tracking in the object context.

SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean)

Speichert alle Aktualisierungen der Datenquelle permanent und setzt optional die Änderungsnachverfolgung im Objektkontext zurück.Persists all updates to the data source and optionally resets change tracking in the object context.

SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions)

Speichert alle Aktualisierungen der Datenquelle permanent mit dem angegebenen SaveOptions.Persists all updates to the data source with the specified SaveOptions.

SaveChanges() SaveChanges() SaveChanges() SaveChanges()

Speichert alle Aktualisierungen der Datenquelle permanent und setzt die Änderungsnachverfolgung im Objektkontext zurück.Persists all updates to the data source and resets change tracking in the object context.

public:
 int SaveChanges();
public int SaveChanges ();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer

Gibt zurück

Die Anzahl von Objekten im Zustand Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Ausnahmen

In der Datenquelle wurde die vollständige Parallelität verletzt.An optimistic concurrency violation has occurred in the data source.

Beispiele

Dieses Beispiel basiert auf dem AdventureWorks Sales-Modell.This example is based on the AdventureWorks Sales Model. Im diesem Beispiel wird versucht, Änderungen zu speichern, die möglicherweise einen Parallelitätskonflikt verursachen.This example tries to save changes, which may cause a concurrency conflict. Anschließend wird gezeigt, wie der Parallelitätskonflikt gelöst wird, indem der Objektkontext aktualisiert wird, bevor die Änderungen erneut gespeichert werden.Then, it demonstrates how to resolve the concurrency conflict by refreshing the object context before re-saving changes.

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());
    }
}
Using context As New AdventureWorksEntities()
    Try
        ' Perform an operation with a high-level of concurrency. 
        ' Change the status of all orders without an approval code. 
        Dim orders As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Where("it.CreditCardApprovalCode IS NULL").Top("100")

        For Each order As SalesOrderHeader In orders
            ' Reset the order status to 4 = Rejected. 
            order.Status = 4
        Next
        Try
            ' Try to save changes, which may cause a conflict. 
            Dim num As Integer = context.SaveChanges()
            Console.WriteLine("No conflicts. " & num.ToString() & " updates saved.")
        Catch generatedExceptionName As 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")
        End Try

        For Each order As SalesOrderHeader In orders
            Console.WriteLine(("Order ID: " & order.SalesOrderID.ToString() & " Order status: ") + order.Status.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

Hinweise

Um sicherzustellen, dass Objekte auf dem Client durch Datenquellen seitige Logik aktualisiert wurden, können Sie die Refresh -Methode mit dem-Wert nach SaveChangesdem StoreWins -Befehl aufzurufen.To ensure that objects on the client have been updated by data source-side logic, you can call the Refresh method with the StoreWins value after you call SaveChanges. Weitere Informationen finden Sie unter Speichern von Änderungen und verwaltenvon Parallelität.For more information, see Saving Changes and Managing Concurrency.

SaveChangesarbeitet innerhalb einer Transaktion.SaveChanges operates within a transaction. SaveChangesführt ein Rollback für diese Transaktion aus und löst eine Ausnahme aus, ObjectStateEntry wenn eines der geänderten Objekte nicht beibehalten werden kann.SaveChanges will roll back that transaction and throw an exception if any of the dirty ObjectStateEntry objects cannot be persisted.

Wenn die vollständige Parallelität verletzt wurde, wird eine OptimisticConcurrencyException ausgelöst.If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. Die Verletzung der vollständigen Parallelität kann aufgelöst werden, indem Sie sie abfangen, die Refresh-Methode mit dem Wert StoreWins oder ClientWins aufrufen und anschließend SaveChanges erneut aufrufen.You can resolve an optimistic concurrency violation by catching it, calling the Refresh method with the StoreWins or ClientWins value, and then calling SaveChanges again. Weitere Informationen finden Sie unter Vorgehensweise: Verwalten von Daten Parallelität im Objekt Kontext.For more information, see How to: Manage Data Concurrency in the Object Context.

Siehe auch

SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean)

Warnung

Diese API ist jetzt veraltet.

Speichert alle Aktualisierungen der Datenquelle permanent und setzt optional die Änderungsnachverfolgung im Objektkontext zurück.Persists all updates to the data source and optionally resets change tracking in the object context.

public:
 int SaveChanges(bool acceptChangesDuringSave);
[System.ComponentModel.Browsable(false)]
[System.Obsolete("Use SaveChanges(SaveOptions options) instead.")]
public int SaveChanges (bool acceptChangesDuringSave);
member this.SaveChanges : bool -> int
Public Function SaveChanges (acceptChangesDuringSave As Boolean) As Integer

Parameter

acceptChangesDuringSave
Boolean Boolean Boolean Boolean

Dieser Parameter ist für die Unterstützung von clientseitigen Transaktionen erforderlich.This parameter is needed for client-side transaction support. Wenn true festgelegt ist, wird die Änderungsnachverfolgung für alle Objekte nach Abschluss von SaveChanges(Boolean) zurückgesetzt.If true, the change tracking on all objects is reset after SaveChanges(Boolean) finishes. Wenn false festgelegt ist, muss die AcceptAllChanges()-Methode nach SaveChanges(Boolean) aufgerufen werden.If false, you must call the AcceptAllChanges() method after SaveChanges(Boolean).

Gibt zurück

Die Anzahl von Objekten im Zustand Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Ausnahmen

Eine Verletzung der vollständigen Parallelität ist aufgetreten.An optimistic concurrency violation has occurred.

Hinweise

Stattdessen wird SaveChanges(SaveOptions) die-Methode aufgerufen.Call the SaveChanges(SaveOptions) method instead.

SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions)

Speichert alle Aktualisierungen der Datenquelle permanent mit dem angegebenen SaveOptions.Persists all updates to the data source with the specified SaveOptions.

public:
 virtual int SaveChanges(System::Data::Objects::SaveOptions options);
public virtual int SaveChanges (System.Data.Objects.SaveOptions options);
abstract member SaveChanges : System.Data.Objects.SaveOptions -> int
override this.SaveChanges : System.Data.Objects.SaveOptions -> int
Public Overridable Function SaveChanges (options As SaveOptions) As Integer

Parameter

options
SaveOptions SaveOptions SaveOptions SaveOptions

Ein SaveOptions-Wert, der das Verhalten des Vorgangs bestimmt.A SaveOptions value that determines the behavior of the operation.

Gibt zurück

Die Anzahl von Objekten im Zustand Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Ausnahmen

Eine Verletzung der vollständigen Parallelität ist aufgetreten.An optimistic concurrency violation has occurred.

Hinweise

Verwenden Sie diese spezielle über SaveChanges Ladung von, um sicher DetectChanges zustellen, dass aufgerufen wird, bevor Sie Änderungen an AcceptAllChanges der Datenquelle speichern oder nach dem Speichern von Änderungen in der Datenquelle aufgerufen wird.Use this specific overload of SaveChanges to either make sure that DetectChanges is called before you save changes to the data source or that AcceptAllChanges is called after you save changes to the data source.

Diese Enumeration verfügt über FlagsAttribute eine, die eine bitweise Kombination der Element Werte zulässt.This enumeration has a FlagsAttribute that allows for a bitwise combination of its member values.

Um sicherzustellen, dass Objekte auf dem Client durch Datenquellen seitige Logik aktualisiert wurden, können Sie die Refresh -Methode mit dem-Wert nach SaveChangesdem StoreWins -Befehl aufzurufen.To make sure that objects on the client have been updated by data source-side logic, you can call the Refresh method with the StoreWins value after you call SaveChanges. Die SaveChanges -Methode arbeitet in einer Transaktion.The SaveChanges method operates in a transaction. SaveChangesführt ein Rollback für diese Transaktion aus und löst eine Ausnahme aus, wenn ObjectStateEntry eines der geänderten Objekte nicht beibehalten werden kann.SaveChanges will roll back that transaction and throw an exception if any one of the dirty ObjectStateEntry objects cannot be persisted.

Wenn die vollständige Parallelität verletzt wurde, wird eine OptimisticConcurrencyException ausgelöst.If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. Die Verletzung der vollständigen Parallelität kann aufgelöst werden, indem Sie sie abfangen, die Refresh-Methode mit dem Wert StoreWins oder ClientWins aufrufen und anschließend die SaveChanges-Methode erneut aufrufen.You can resolve an optimistic concurrency violation by catching it, calling the Refresh method with the StoreWins or ClientWins values, and then calling the SaveChanges method again. Weitere Informationen finden Sie unter Vorgehensweise: Verwalten von Daten Parallelität im Objekt Kontext.For more information, see How to: Manage Data Concurrency in the Object Context.

Gilt für: