ObjectContext.SaveChanges Metodo

Definizione

Rende persistenti tutti gli aggiornamenti all'origine dati.

Overload

SaveChanges()

Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta il rilevamento delle modifiche nel contesto dell'oggetto.

SaveChanges(Boolean)
Obsoleti.

Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta facoltativamente il rilevamento delle modifiche nel contesto dell'oggetto.

SaveChanges(SaveOptions)

Rende persistenti tutti gli aggiornamenti all'origine dati con l'oggetto SaveOptions specificato.

SaveChanges()

Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta il rilevamento delle modifiche nel contesto dell'oggetto.

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

Restituisce

Il numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().

Eccezioni

Si è verificata una violazione di concorrenza ottimistica nell'origine dati.

Esempio

In questo esempio si tenta di salvare modifiche che possono provocare un conflitto di concorrenza. Viene quindi illustrato come risolvere il conflitto di concorrenza aggiornando il contesto dell'oggetto prima di salvare nuovamente le modifiche.

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

Commenti

Per essere certi che gli oggetti presenti nel client siano stati aggiornati in base alla logica lato origine dei dati, è possibile chiamare il metodo Refresh con il valore StoreWins dopo la chiamata a SaveChanges. Per altre informazioni, vedere Salvataggio delle modifiche e gestione della concorrenza.

SaveChanges opera all'interno di una transazione. SaveChanges eseguirà il rollback della transazione e genererà un'eccezione se uno degli oggetti sporchi ObjectStateEntry non può essere mantenuto.

Se si è verificata una violazione della concorrenza ottimistica, viene generata un'eccezione OptimisticConcurrencyException. È possibile risolvere una violazione della concorrenza ottimistica rilevandola, chiamando il metodo Refresh con il valore StoreWins o ClientWins e quindi chiamando nuovamente SaveChanges. Per altre informazioni, vedere Procedura: Gestire la concorrenza dei dati nel contesto dell'oggetto.

Vedi anche

Si applica a

SaveChanges(Boolean)

Attenzione

Use SaveChanges(SaveOptions options) instead.

Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta facoltativamente il rilevamento delle modifiche nel contesto dell'oggetto.

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

Parametri

acceptChangesDuringSave
Boolean

Questo parametro è necessario per il supporto delle transazioni lato client. Se il valore è true, il rilevamento delle modifiche in tutti gli oggetti viene reimpostato dopo il completamento del metodo SaveChanges(Boolean). Se il valore è false, è necessario chiamare il metodo AcceptAllChanges() dopo SaveChanges(Boolean).

Restituisce

Il numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().

Attributi

Eccezioni

Se si è verificata una violazione della concorrenza ottimistica.

Commenti

Chiamare invece il SaveChanges(SaveOptions) metodo.

Si applica a

SaveChanges(SaveOptions)

Rende persistenti tutti gli aggiornamenti all'origine dati con l'oggetto SaveOptions specificato.

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

Parametri

options
SaveOptions

Valore di SaveOptions che determina il comportamento dell'operazione.

Restituisce

Il numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().

Eccezioni

Se si è verificata una violazione della concorrenza ottimistica.

Commenti

Usare questo overload specifico di per assicurarsi che DetectChanges venga chiamato prima di SaveChanges salvare le modifiche all'origine dati o che AcceptAllChanges viene chiamato dopo aver salvato le modifiche all'origine dati.

Questa enumerazione ha un FlagsAttribute oggetto che consente una combinazione bit per bit dei relativi valori membro.

Per assicurarsi che gli oggetti nel client siano stati aggiornati dalla logica lato origine dati, è possibile chiamare il metodo con il RefreshStoreWins valore dopo la chiamata SaveChanges. Il SaveChanges metodo opera in una transazione. SaveChanges eseguirà il rollback della transazione e genererà un'eccezione se uno degli oggetti sporchi ObjectStateEntry non può essere mantenuto.

Se si è verificata una violazione della concorrenza ottimistica, viene generata un'eccezione OptimisticConcurrencyException. È possibile risolvere una violazione della concorrenza ottimistica rilevandola, chiamando il metodo Refresh con i valori StoreWins o ClientWins e quindi chiamando nuovamente il metodo SaveChanges. Per altre informazioni, vedere Procedura: Gestire la concorrenza dei dati nel contesto dell'oggetto.

Si applica a