Freigeben über


ObjectContext.SaveChanges Methode

Definition

Speichert alle Aktualisierungen der Datenquelle permanent.

Überlädt

SaveChanges()

Speichert alle Aktualisierungen der Datenquelle permanent und setzt die Änderungsnachverfolgung im Objektkontext zurück.

SaveChanges(Boolean)
Veraltet.

Speichert alle Aktualisierungen der Datenquelle permanent und setzt optional die Änderungsnachverfolgung im Objektkontext zurück.

SaveChanges(SaveOptions)

Speichert alle Aktualisierungen der Datenquelle permanent mit dem angegebenen SaveOptions.

SaveChanges()

Speichert alle Aktualisierungen der Datenquelle permanent und setzt die Änderungsnachverfolgung im Objektkontext zurück.

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

Gibt zurück

Die Anzahl von Objekten im Status Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.

Ausnahmen

In der Datenquelle wurde die vollständige Parallelität verletzt.

Beispiele

Im diesem Beispiel wird versucht, Änderungen zu speichern, die möglicherweise einen Parallelitätskonflikt verursachen. 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

Um sicherzustellen, dass Objekte auf dem Client von datenquellenseitiger Logik aktualisiert wurden, können Sie die Refresh -Methode mit dem StoreWins -Wert aufrufen, nachdem Sie aufgerufen SaveChangeshaben. Weitere Informationen finden Sie unter Speichern von Änderungen und Verwalten von Parallelität.

SaveChanges innerhalb einer Transaktion ausgeführt wird. SaveChanges führt ein Rollback für diese Transaktion durch und löst eine Ausnahme aus, wenn eines der fehlerhaften ObjectStateEntry Objekte nicht beibehalten werden kann.

Wenn die vollständige Parallelität verletzt wurde, wird eine OptimisticConcurrencyException ausgelöst. 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. Weitere Informationen finden Sie unter How to: Manage Data Concurrency in the Object Context.For more information, see How to: Manage Data Parallelcurrency in the Object Context.

Weitere Informationen

Gilt für:

SaveChanges(Boolean)

Achtung

Use SaveChanges(SaveOptions options) instead.

Speichert alle Aktualisierungen der Datenquelle permanent und setzt optional die Änderungsnachverfolgung im Objektkontext zurück.

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

Parameter

acceptChangesDuringSave
Boolean

Dieser Parameter wird für clientseitige Transaktionsunterstützung benötigt. Wenn true festgelegt ist, wird die Änderungsnachverfolgung für alle Objekte nach Abschluss von SaveChanges(Boolean) zurückgesetzt. Wenn false festgelegt ist, muss die AcceptAllChanges()-Methode nach SaveChanges(Boolean) aufgerufen werden.

Gibt zurück

Die Anzahl von Objekten im Status Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.

Attribute

Ausnahmen

Die vollständige Parallelität wurde verletzt.

Hinweise

Rufen Sie stattdessen die SaveChanges(SaveOptions) -Methode auf.

Gilt für:

SaveChanges(SaveOptions)

Speichert alle Aktualisierungen der Datenquelle permanent mit dem angegebenen 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

Ein SaveOptions-Wert, der das Verhalten des Vorgangs bestimmt.

Gibt zurück

Die Anzahl von Objekten im Status Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.

Ausnahmen

Die vollständige Parallelität wurde verletzt.

Hinweise

Verwenden Sie diese spezifische Überladung von, SaveChanges um sicherzustellen, dass entweder aufgerufen wird, DetectChanges bevor Sie Änderungen an der Datenquelle speichern, oder die aufgerufen wird, AcceptAllChanges nachdem Sie Änderungen an der Datenquelle gespeichert haben.

Diese Enumeration verfügt über eine FlagsAttribute , die eine bitweise Kombination ihrer Memberwerte zulässt.

Um sicherzustellen, dass Objekte auf dem Client von der datenquellenseitigen Logik aktualisiert wurden, können Sie die Refresh -Methode mit dem StoreWins -Wert aufrufen, nachdem Sie aufgerufen SaveChangeshaben. Die SaveChanges -Methode wird in einer Transaktion ausgeführt. SaveChanges führt ein Rollback für diese Transaktion durch und löst eine Ausnahme aus, wenn eines der fehlerhaften ObjectStateEntry Objekte nicht beibehalten werden kann.

Wenn die vollständige Parallelität verletzt wurde, wird eine OptimisticConcurrencyException ausgelöst. 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. Weitere Informationen finden Sie unter How to: Manage Data Concurrency in the Object Context.For more information, see How to: Manage Data Parallelcurrency in the Object Context.

Gilt für: