ObjectContext.SaveChanges Metodo

Definizione

Rende persistenti tutti gli aggiornamenti all'origine dati.Persists all updates to the data source.

Overload

SaveChanges()

Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta il rilevamento delle modifiche nel contesto dell'oggetto.Persists all updates to the data source and resets change tracking in the object context.

SaveChanges(Boolean)

Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta facoltativamente il rilevamento delle modifiche nel contesto dell'oggetto.Persists all updates to the data source and optionally resets change tracking in the object context.

SaveChanges(SaveOptions)

Rende persistenti tutti gli aggiornamenti all'origine dati con l'oggetto SaveOptions specificato.Persists all updates to the data source with the specified SaveOptions.

SaveChanges()

Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta il rilevamento delle modifiche nel contesto dell'oggetto.Persists all updates to the data source and resets change tracking in the object context.

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

Restituisce

Numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Eccezioni

Si è verificata una violazione di concorrenza ottimistica nell'origine dati.An optimistic concurrency violation has occurred in the data source.

Esempi

Questo esempio è basato sul modello Sales di AdventureWorks.This example is based on the AdventureWorks Sales Model. In questo esempio si tenta di salvare modifiche che possono provocare un conflitto di concorrenza.This example tries to save changes, which may cause a concurrency conflict. Viene quindi illustrato come risolvere il conflitto di concorrenza aggiornando il contesto dell'oggetto prima di salvare nuovamente le modifiche.Then, it demonstrates how to resolve the concurrency conflict by refreshing the object context before re-saving changes.

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());
    }
}
Using context As New AdventureWorksEntities()
    Try
        ' Perform an operation with a high-level of concurrency. 
        ' Change the status of all orders without an approval code. 
        Dim orders As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Where("it.CreditCardApprovalCode IS NULL").Top("100")

        For Each order As SalesOrderHeader In orders
            ' Reset the order status to 4 = Rejected. 
            order.Status = 4
        Next
        Try
            ' Try to save changes, which may cause a conflict. 
            Dim num As Integer = context.SaveChanges()
            Console.WriteLine("No conflicts. " & num.ToString() & " updates saved.")
        Catch generatedExceptionName As 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")
        End Try

        For Each order As SalesOrderHeader In orders
            Console.WriteLine(("Order ID: " & order.SalesOrderID.ToString() & " Order status: ") + order.Status.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

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.To ensure that objects on the client have been updated by data source-side logic, you can call the Refresh method with the StoreWins value after you call SaveChanges. Per altre informazioni, vedere salvataggio delle modifiche e gestione della concorrenza.For more information, see Saving Changes and Managing Concurrency.

SaveChangesopera all'interno di una transazione.SaveChanges operates within a transaction. SaveChangeseseguirà il rollback di tale transazione e genererà un'eccezione se uno ObjectStateEntry degli oggetti dirty non può essere reso permanente.SaveChanges will roll back that transaction and throw an exception if any of the dirty ObjectStateEntry objects cannot be persisted.

Se si è verificata una violazione della concorrenza ottimistica, viene generata un'eccezione OptimisticConcurrencyException.If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. È possibile risolvere una violazione della concorrenza ottimistica rilevandola, chiamando il metodo Refresh con il valore StoreWins o ClientWins e quindi chiamando nuovamente SaveChanges.You can resolve an optimistic concurrency violation by catching it, calling the Refresh method with the StoreWins or ClientWins value, and then calling SaveChanges again. Per altre informazioni, vedere Procedura: Gestire la concorrenza dei dati nel contestodell'oggetto.For more information, see How to: Manage Data Concurrency in the Object Context.

Vedi anche

SaveChanges(Boolean)

Avviso

Questa API è ora obsoleta.

Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta facoltativamente il rilevamento delle modifiche nel contesto dell'oggetto.Persists all updates to the data source and optionally resets change tracking in the object context.

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
Public Function SaveChanges (acceptChangesDuringSave As Boolean) As Integer

Parametri

acceptChangesDuringSave
Boolean

Questo parametro è necessario per il supporto delle transazioni lato client.This parameter is needed for client-side transaction support. Se il valore è true, il rilevamento delle modifiche in tutti gli oggetti viene reimpostato dopo il completamento del metodo SaveChanges(Boolean).If true, the change tracking on all objects is reset after SaveChanges(Boolean) finishes. Se il valore è false, è necessario chiamare il metodo AcceptAllChanges() dopo SaveChanges(Boolean).If false, you must call the AcceptAllChanges() method after SaveChanges(Boolean).

Restituisce

Numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Attributi

Eccezioni

Se si è verificata una violazione della concorrenza ottimistica.An optimistic concurrency violation has occurred.

Commenti

Chiamare invece SaveChanges(SaveOptions) il metodo.Call the SaveChanges(SaveOptions) method instead.

SaveChanges(SaveOptions)

Rende persistenti tutti gli aggiornamenti all'origine dati con l'oggetto SaveOptions specificato.Persists all updates to the data source with the specified 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

Parametri

options
SaveOptions

Valore di SaveOptions che determina il comportamento dell'operazione.A SaveOptions value that determines the behavior of the operation.

Restituisce

Numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Eccezioni

Se si è verificata una violazione della concorrenza ottimistica.An optimistic concurrency violation has occurred.

Commenti

Utilizzare questo overload specifico di SaveChanges per assicurarsi che DetectChanges venga chiamato prima di salvare le modifiche apportate all'origine dati o AcceptAllChanges che venga chiamato dopo il salvataggio delle modifiche apportate all'origine dati.Use this specific overload of SaveChanges to either make sure that DetectChanges is called before you save changes to the data source or that AcceptAllChanges is called after you save changes to the data source.

Questa enumerazione dispone di FlagsAttribute un oggetto che consente una combinazione bit per bit dei relativi valori dei membri.This enumeration has a FlagsAttribute that allows for a bitwise combination of its member values.

Per assicurarsi che gli oggetti nel client siano stati aggiornati dalla logica lato origine dati, è possibile chiamare il Refresh metodo con il valore dopo la StoreWins chiamata SaveChangesa.To make sure that objects on the client have been updated by data source-side logic, you can call the Refresh method with the StoreWins value after you call SaveChanges. Il SaveChanges metodo opera in una transazione.The SaveChanges method operates in a transaction. SaveChangeseseguirà il rollback di tale transazione e genererà un'eccezione se uno degli ObjectStateEntry oggetti dirty non può essere reso permanente.SaveChanges will roll back that transaction and throw an exception if any one of the dirty ObjectStateEntry objects cannot be persisted.

Se si è verificata una violazione della concorrenza ottimistica, viene generata un'eccezione OptimisticConcurrencyException.If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. È 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.You can resolve an optimistic concurrency violation by catching it, calling the Refresh method with the StoreWins or ClientWins values, and then calling the SaveChanges method again. Per altre informazioni, vedere Procedura: Gestire la concorrenza dei dati nel contestodell'oggetto.For more information, see How to: Manage Data Concurrency in the Object Context.

Si applica a