Udostępnij za pośrednictwem


ObjectContext.SaveChanges Metoda

Definicja

Utrwala wszystkie aktualizacje źródła danych.

Przeciążenia

SaveChanges()

Utrwala wszystkie aktualizacje źródła danych i resetuje śledzenie zmian w kontekście obiektu.

SaveChanges(Boolean)
Przestarzałe.

Utrwala wszystkie aktualizacje źródła danych i opcjonalnie resetuje śledzenie zmian w kontekście obiektu.

SaveChanges(SaveOptions)

Utrwala wszystkie aktualizacje źródła danych przy użyciu określonego SaveOptionselementu .

SaveChanges()

Utrwala wszystkie aktualizacje źródła danych i resetuje śledzenie zmian w kontekście obiektu.

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

Zwraca

Liczba obiektów w Addedstanie , Modifiedlub Deleted , gdy SaveChanges() została wywołana.

Wyjątki

W źródle danych wystąpiło optymistyczne naruszenie współbieżności.

Przykłady

W tym przykładzie próbuje zapisać zmiany, które mogą powodować konflikt współbieżności. Następnie pokazuje, jak rozwiązać konflikt współbieżności, odświeżając kontekst obiektu przed ponownym zapisaniem zmian.

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());
    }
}

Uwagi

Aby upewnić się, że obiekty na kliencie zostały zaktualizowane przez logikę po stronie źródła danych, możesz wywołać metodę Refresh z wartością StoreWins po wywołaniu SaveChangesmetody . Aby uzyskać więcej informacji, zobacz Zapisywanie zmian i zarządzanie współbieżnością.

SaveChanges działa w ramach transakcji. SaveChanges spowoduje wycofanie tej transakcji i zgłoszenie wyjątku, jeśli którykolwiek z zanieczyszczonych ObjectStateEntry obiektów nie może być utrwalone.

Jeśli wystąpiło optymistyczne naruszenie współbieżności, OptimisticConcurrencyException zostanie zgłoszony błąd. Można rozwiązać optymistyczne naruszenie współbieżności, przechwytując ją, wywołując metodę Refresh z wartością StoreWins lub ClientWins , a następnie wywołując SaveChanges ponownie. Aby uzyskać więcej informacji, zobacz How to: Manage Data Concurrency in the Object Context (Jak zarządzać współbieżnością danych w kontekście obiektu).

Zobacz też

Dotyczy

SaveChanges(Boolean)

Przestroga

Use SaveChanges(SaveOptions options) instead.

Utrwala wszystkie aktualizacje źródła danych i opcjonalnie resetuje śledzenie zmian w kontekście obiektu.

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

Parametry

acceptChangesDuringSave
Boolean

Ten parametr jest wymagany do obsługi transakcji po stronie klienta. Jeśli truefunkcja śledzenia zmian we wszystkich obiektach zostanie zresetowana po SaveChanges(Boolean) zakończeniu. Jeśli falseelement , należy wywołać metodę AcceptAllChanges() po SaveChanges(Boolean).

Zwraca

Liczba obiektów w Addedstanie , Modifiedlub Deleted , gdy SaveChanges() została wywołana.

Atrybuty

Wyjątki

Wystąpiło optymistyczne naruszenie współbieżności.

Uwagi

Wywołaj metodę SaveChanges(SaveOptions) zamiast tego.

Dotyczy

SaveChanges(SaveOptions)

Utrwala wszystkie aktualizacje źródła danych przy użyciu określonego SaveOptionselementu .

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

Parametry

options
SaveOptions

SaveOptions Wartość określająca zachowanie operacji.

Zwraca

Liczba obiektów w Addedstanie , Modifiedlub Deleted , gdy SaveChanges() została wywołana.

Wyjątki

Wystąpiło optymistyczne naruszenie współbieżności.

Uwagi

Użyj tego konkretnego SaveChanges przeciążenia, aby upewnić się, że DetectChanges jest wywoływana przed zapisaniem zmian w źródle danych lub AcceptAllChanges wywoływanym po zapisaniu zmian w źródle danych.

Ta wyliczenie ma wartość FlagsAttribute , która umożliwia bitową kombinację jego wartości składowych.

Aby upewnić się, że obiekty na kliencie zostały zaktualizowane przez logikę po stronie źródła danych, możesz wywołać metodę Refresh z wartością StoreWins po wywołaniu SaveChangesmetody . Metoda SaveChanges działa w transakcji. SaveChanges spowoduje wycofanie tej transakcji i zgłoszenie wyjątku, jeśli nie można utrwalić żadnego z zanieczyszczonych ObjectStateEntry obiektów.

Jeśli wystąpiło optymistyczne naruszenie współbieżności, OptimisticConcurrencyException zostanie zgłoszony błąd. Można rozwiązać optymistyczne naruszenie współbieżności, przechwytując ją, wywołując Refresh metodę z wartościami StoreWins lub ClientWins , a następnie wywołując metodę SaveChanges ponownie. Aby uzyskać więcej informacji, zobacz How to: Manage Data Concurrency in the Object Context (Jak zarządzać współbieżnością danych w kontekście obiektu).

Dotyczy