Freigeben über


ObjectContext.SaveChanges Methode

Definition

Speichert alle Aktualisierungen der Datenquelle.

Überlädt

Name Beschreibung
SaveChanges()

Behält alle Aktualisierungen der Datenquelle bei und setzt die Änderungsnachverfolgung im Objektkontext zurück.

SaveChanges(Boolean)
Veraltet.

Behält alle Aktualisierungen der Datenquelle bei und setzt optional die Änderungsnachverfolgung im Objektkontext zurück.

SaveChanges(SaveOptions)

Speichert alle Aktualisierungen der Datenquelle mit dem angegebenen SaveOptions.

SaveChanges()

Behält alle Aktualisierungen der Datenquelle bei 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 der Objekte in einem Added, Modifiedoder Deleted Zustand, wenn SaveChanges() aufgerufen wurde.

Ausnahmen

In der Datenquelle ist eine optimistische Parallelitätsverletzung aufgetreten.

Beispiele

In diesem Beispiel wird versucht, Änderungen zu speichern, was zu einem Parallelitätskonflikt führen kann. Anschließend wird veranschaulicht, 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

Um sicherzustellen, dass Objekte auf dem Client von datenquellenseitiger Logik aktualisiert wurden, können Sie die Refresh Methode nach dem Aufruf mit dem StoreWins Wert aufrufen SaveChanges.

SaveChanges innerhalb einer Transaktion ausgeführt. SaveChanges führt einen Rollback dieser Transaktion durch und löst eine Ausnahme aus, wenn eines der geänderten ObjectStateEntry Objekte nicht beibehalten werden kann.

Wenn eine optimistische Parallelitätsverletzung aufgetreten ist, wird ein OptimisticConcurrencyException Fehler ausgelöst. Sie können eine optimistische Parallelitätsverletzung beheben, indem Sie sie abfangen, die Refresh Methode mit dem StoreWins Wert aufrufen ClientWins und dann erneut aufrufen SaveChanges .

Weitere Informationen

Gilt für:

SaveChanges(Boolean)

Achtung

Use SaveChanges(SaveOptions options) instead.

Behält alle Aktualisierungen der Datenquelle bei 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 die unterstützung clientseitiger Transaktionen benötigt. Wenn truedie Änderungsnachverfolgung für alle Objekte nach SaveChanges(Boolean) Abschluss zurückgesetzt wird. Wenn false, müssen Sie die AcceptAllChanges() Methode nach SaveChanges(Boolean).

Gibt zurück

Die Anzahl der Objekte in einem Added, Modifiedoder Deleted Zustand, wenn SaveChanges() aufgerufen wurde.

Attribute

Ausnahmen

Es ist eine optimistische Parallelitätsverletzung aufgetreten.

Hinweise

Rufen Sie stattdessen die SaveChanges(SaveOptions) Methode auf.

Gilt für:

SaveChanges(SaveOptions)

Speichert alle Aktualisierungen der Datenquelle 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 der Objekte in einem Added, Modifiedoder Deleted Zustand, wenn SaveChanges() aufgerufen wurde.

Ausnahmen

Es ist eine optimistische Parallelitätsverletzung aufgetreten.

Hinweise

Verwenden Sie diese spezielle Überladung, SaveChanges um entweder sicherzustellen, dass sie aufgerufen wird, DetectChanges bevor Sie Änderungen an der Datenquelle speichern oder AcceptAllChanges nach dem Speichern von Änderungen an der Datenquelle aufgerufen werden.

Diese Enumeration verfügt über eine FlagsAttribute bitweise Kombination ihrer Memberwerte.

Um sicherzustellen, dass Objekte auf dem Client von datenquellenseitiger Logik aktualisiert wurden, können Sie die Refresh Methode nach dem Aufruf mit dem StoreWins Wert aufrufen SaveChanges. Die SaveChanges Methode wird in einer Transaktion ausgeführt. SaveChanges führt einen Rollback für diese Transaktion durch und löst eine Ausnahme aus, wenn eines der geänderten ObjectStateEntry Objekte nicht beibehalten werden kann.

Wenn eine optimistische Parallelitätsverletzung aufgetreten ist, wird ein OptimisticConcurrencyException Fehler ausgelöst. Sie können eine optimistische Parallelitätsverletzung beheben, indem Sie sie abfangen, die Refresh Methode mit den StoreWins Werten aufrufen ClientWins und dann die SaveChanges Methode erneut aufrufen.

Gilt für: