Sdílet prostřednictvím


ObjectContext.SaveChanges Metoda

Definice

Zachová všechny aktualizace zdroje dat.

Přetížení

SaveChanges()

Zachová všechny aktualizace zdroje dat a resetuje sledování změn v kontextu objektu.

SaveChanges(Boolean)
Zastaralé.

Zachová všechny aktualizace zdroje dat a volitelně resetuje sledování změn v kontextu objektu.

SaveChanges(SaveOptions)

Zachová všechny aktualizace zdroje dat se zadaným SaveOptionsparametrem .

SaveChanges()

Zachová všechny aktualizace zdroje dat a resetuje sledování změn v kontextu objektu.

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

Návraty

Počet objektů ve Addedstavu , Modifiednebo Deleted při SaveChanges() zavolání.

Výjimky

Ve zdroji dat došlo k narušení optimistické souběžnosti.

Příklady

Tento příklad se pokusí uložit změny, což může způsobit konflikt souběžnosti. Potom ukazuje, jak vyřešit konflikt souběžnosti aktualizací kontextu objektu před opětovným uložením změn.

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

Poznámky

Pokud chcete zajistit, aby se objekty v klientovi aktualizovaly logikou na straně zdroje dat, můžete po volání SaveChangesvolat metodu RefreshStoreWins s hodnotou . Další informace najdete v tématech Ukládání změn a Správa souběžnosti.

SaveChanges funguje v rámci transakce. SaveChanges vrátí zpět transakci a vyvolá výjimku, pokud některý z nezašpiněných ObjectStateEntry objektů nelze zachovat.

Pokud dojde k narušení optimistické souběžnosti, OptimisticConcurrencyException vyvolá se chyba . Narušení optimistické souběžnosti můžete vyřešit tak, že ho zachytíte, zavoláte metodu RefreshStoreWins s hodnotou nebo ClientWins a pak zavoláte SaveChanges znovu. Další informace najdete v tématu Postupy: Správa souběžnosti dat v kontextu objektu.

Viz také

Platí pro

SaveChanges(Boolean)

Upozornění

Use SaveChanges(SaveOptions options) instead.

Zachová všechny aktualizace zdroje dat a volitelně resetuje sledování změn v kontextu objektu.

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

Tento parametr je potřebný pro podporu transakcí na straně klienta. Pokud true, sledování změn u všech objektů se po SaveChanges(Boolean) dokončení resetuje. Pokud false, musíte zavolat metodu AcceptAllChanges() .SaveChanges(Boolean)

Návraty

Počet objektů ve Addedstavu , Modifiednebo Deleted při SaveChanges() zavolání.

Atributy

Výjimky

Došlo k narušení optimistické souběžnosti.

Poznámky

Místo toho zavolejte metodu SaveChanges(SaveOptions) .

Platí pro

SaveChanges(SaveOptions)

Zachová všechny aktualizace zdroje dat se zadaným SaveOptionsparametrem .

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

Hodnota SaveOptions , která určuje chování operace.

Návraty

Počet objektů ve Addedstavu , Modifiednebo Deleted při SaveChanges() zavolání.

Výjimky

Došlo k narušení optimistické souběžnosti.

Poznámky

Pomocí tohoto konkrétního SaveChanges přetížení se ujistěte, že DetectChanges je volána před uložením změn ve zdroji dat, nebo se AcceptAllChanges volá po uložení změn ve zdroji dat.

Tento výčet má hodnotu FlagsAttribute , která umožňuje bitové kombinace hodnot členů.

Pokud chcete zajistit, aby objekty v klientovi byly aktualizovány logikou na straně zdroje dat, můžete po volání SaveChangesvolat metodu StoreWinsRefresh s hodnotou . Metoda SaveChanges pracuje v transakci. SaveChanges vrátí zpět transakci a vyvolá výjimku, pokud některý z nezašpiněných ObjectStateEntry objektů nelze zachovat.

Pokud dojde k narušení optimistické souběžnosti, OptimisticConcurrencyException vyvolá se chyba . Narušení optimistické souběžnosti můžete vyřešit tak, že ho zachytíte, zavoláte metodu Refresh s StoreWins hodnotami nebo ClientWins a pak znovu zavoláte metodu SaveChanges . Další informace najdete v tématu Postupy: Správa souběžnosti dat v kontextu objektu.

Platí pro