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

Ten przykład próbuje zapisać zmiany, co może spowodować 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 obiektów nie może być utrwalone ObjectStateEntry .

Jeśli wystąpiło optymistyczne naruszenie współbieżności, OptimisticConcurrencyException zgłaszany jest błąd . Można rozwiązać problem z optymistycznym naruszeniem współbieżności, przechwytując je, wywołując Refresh metodę z wartością StoreWins lub ClientWins , a następnie wywołując SaveChanges ją 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 trueelement , śledzenie zmian we wszystkich obiektach zostanie zresetowane po SaveChanges(Boolean) zakończeniu. Jeśli false, 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

Zamiast tego wywołaj metodę SaveChanges(SaveOptions) .

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 elementu , aby upewnić się, że DetectChanges jest wywoływana przed zapisanie zmian w źródle danych lub wywoływana AcceptAllChanges po zapisaniu zmian w źródle danych.

Ta wyliczenie ma wartość FlagsAttribute , która umożliwia bitową kombinację 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 którykolwiek z zanieczyszczonych obiektów nie może być utrwalone ObjectStateEntry .

Jeśli wystąpiło optymistyczne naruszenie współbieżności, OptimisticConcurrencyException zgłaszany jest błąd . Można rozwiązać optymistyczne naruszenie współbieżności, przechwytując go, 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