ObjectContext.SaveChanges ObjectContext.SaveChanges ObjectContext.SaveChanges ObjectContext.SaveChanges Method

Definición

Conserva todas las actualizaciones en el origen de datos.Persists all updates to the data source.

Sobrecargas

SaveChanges() SaveChanges() SaveChanges() SaveChanges()

Conserva todas las actualizaciones en el origen de datos y restablece el seguimiento de cambios en el contexto del objeto.Persists all updates to the data source and resets change tracking in the object context.

SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean)

Conserva todas las actualizaciones en el origen de datos y, opcionalmente, restablece el seguimiento de cambios en el contexto del objeto.Persists all updates to the data source and optionally resets change tracking in the object context.

SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions)

Conserva todas las actualizaciones al origen de datos con el SaveOptions especificado.Persists all updates to the data source with the specified SaveOptions.

SaveChanges() SaveChanges() SaveChanges() SaveChanges()

Conserva todas las actualizaciones en el origen de datos y restablece el seguimiento de cambios en el contexto del objeto.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

Devoluciones

Número de objetos que tenían el estado Added, Modified o Deleted cuando se llamó al método SaveChanges().The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Excepciones

Se ha producido una infracción de simultaneidad optimista en el origen de datos.An optimistic concurrency violation has occurred in the data source.

Ejemplos

Este ejemplo se basa en el modelo AdventureWorks Sales.This example is based on the AdventureWorks Sales Model. En este ejemplo, se intenta guardar los cambios, lo que puede producir un conflicto de simultaneidad.This example tries to save changes, which may cause a concurrency conflict. A continuación, muestra cómo resolver el conflicto de simultaneidad actualizando el contexto del objeto antes de volver a guardar los cambios.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

Comentarios

Para asegurarse de que los objetos del cliente se han actualizado según la lógica del origen de datos, puede llamar al método Refresh con el valor de StoreWins después de llamar al método 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. Para obtener más información, vea Guardar cambios y administrar la simultaneidad.For more information, see Saving Changes and Managing Concurrency.

SaveChangesfunciona dentro de una transacción.SaveChanges operates within a transaction. SaveChangesrevertirá esa transacción y producirá una excepción si no se puede conservar ObjectStateEntry ninguno de los objetos modificados.SaveChanges will roll back that transaction and throw an exception if any of the dirty ObjectStateEntry objects cannot be persisted.

Si se ha producido una infracción de simultaneidad optimista, se genera una OptimisticConcurrencyException.If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. Puede resolver una infracción de simultaneidad optimista detectándola, llamando al método Refresh con el valor StoreWins o ClientWins y, a continuación, llamando de nuevo al método 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. Para obtener más información, consulte Cómo Administrar la simultaneidad de datos en el contextodel objeto.For more information, see How to: Manage Data Concurrency in the Object Context.

Consulte también:

SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean)

Advertencia

Esta API está ya obsoleta.

Conserva todas las actualizaciones en el origen de datos y, opcionalmente, restablece el seguimiento de cambios en el contexto del objeto.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

Parámetros

acceptChangesDuringSave
Boolean Boolean Boolean Boolean

Este parámetro es necesario para la compatibilidad con las transacciones de cliente.This parameter is needed for client-side transaction support. Si es true, se restablece el seguimiento de cambios en todos los objetos después de que finalice SaveChanges(Boolean).If true, the change tracking on all objects is reset after SaveChanges(Boolean) finishes. Si es false, debe llamar al método AcceptAllChanges() después de SaveChanges(Boolean).If false, you must call the AcceptAllChanges() method after SaveChanges(Boolean).

Devoluciones

Número de objetos que tenían el estado Added, Modified o Deleted cuando se llamó al método SaveChanges().The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Excepciones

Se ha producido una infracción de simultaneidad optimista.An optimistic concurrency violation has occurred.

Comentarios

Llame al SaveChanges(SaveOptions) método en su lugar.Call the SaveChanges(SaveOptions) method instead.

SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions)

Conserva todas las actualizaciones al origen de datos con el SaveOptions especificado.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

Parámetros

options
SaveOptions SaveOptions SaveOptions SaveOptions

Valor de SaveOptions que determina el comportamiento de la operación.A SaveOptions value that determines the behavior of the operation.

Devoluciones

Número de objetos que tenían el estado Added, Modified o Deleted cuando se llamó al método SaveChanges().The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

Excepciones

Se ha producido una infracción de simultaneidad optimista.An optimistic concurrency violation has occurred.

Comentarios

Utilice esta sobrecarga específica de SaveChanges para asegurarse de que DetectChanges se llama a antes de guardar los cambios en el origen de datos AcceptAllChanges o al que se llama después de guardar los cambios en el origen de datos.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.

Esta enumeración tiene FlagsAttribute un que permite una combinación bit a bit de sus valores de miembro.This enumeration has a FlagsAttribute that allows for a bitwise combination of its member values.

Para asegurarse de que los objetos del cliente se han actualizado mediante la lógica del origen de datos, puede llamar al Refresh método con el StoreWins valor después de llamar 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. El SaveChanges método funciona en una transacción.The SaveChanges method operates in a transaction. SaveChangesrevertirá esa transacción y producirá una excepción si no se puede guardar alguno ObjectStateEntry de los objetos modificados.SaveChanges will roll back that transaction and throw an exception if any one of the dirty ObjectStateEntry objects cannot be persisted.

Si se ha producido una infracción de simultaneidad optimista, se genera una OptimisticConcurrencyException.If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. Puede resolver una infracción de simultaneidad optimista detectándola, llamando al método Refresh con el valor StoreWins o ClientWins y, a continuación, llamando de nuevo al método 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. Para obtener más información, consulte Cómo Administrar la simultaneidad de datos en el contextodel objeto.For more information, see How to: Manage Data Concurrency in the Object Context.

Se aplica a