Comparteix a través de


ObjectContext.SaveChanges Método

Definición

Conserva todas las actualizaciones en el origen de datos.

Sobrecargas

SaveChanges()

Conserva todas las actualizaciones en el origen de datos y restablece el seguimiento de cambios en el contexto del objeto.

SaveChanges(Boolean)
Obsoletos.

Conserva todas las actualizaciones en el origen de datos y, opcionalmente, restablece el seguimiento de cambios en el contexto del objeto.

SaveChanges(SaveOptions)

Conserva todas las actualizaciones al origen de datos con el SaveOptions especificado.

SaveChanges()

Conserva todas las actualizaciones en el origen de datos y restablece el seguimiento de cambios en el contexto del objeto.

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().

Excepciones

Se ha producido una infracción de simultaneidad optimista en el origen de datos.

Ejemplos

En este ejemplo, se intenta guardar los cambios, lo que puede producir un conflicto de simultaneidad. A continuación, muestra cómo resolver el conflicto de simultaneidad actualizando el contexto del objeto antes de volver a guardar los cambios.

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

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. Para obtener más información, consulte Guardar cambios y administrar la simultaneidad.

SaveChanges funciona dentro de una transacción. SaveChanges revertirá esa transacción y producirá una excepción si no se puede conservar alguno de los objetos sucios ObjectStateEntry .

Si se ha producido una infracción de simultaneidad optimista, se genera una OptimisticConcurrencyException. 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. Para obtener más información, vea Cómo: Administrar la simultaneidad de datos en el contexto de objeto.

Consulte también

Se aplica a

SaveChanges(Boolean)

Precaución

Use SaveChanges(SaveOptions options) instead.

Conserva todas las actualizaciones en el origen de datos y, opcionalmente, restablece el seguimiento de cambios en el contexto del objeto.

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

Parámetros

acceptChangesDuringSave
Boolean

Este parámetro es necesario para la compatibilidad con transacciones en el cliente. Si es true, se restablece el seguimiento de cambios en todos los objetos después de que finalice SaveChanges(Boolean). Si es false, debe llamar al método AcceptAllChanges() después de SaveChanges(Boolean).

Devoluciones

Número de objetos que tenían el estado Added, Modified o Deleted cuando se llamó al método SaveChanges().

Atributos

Excepciones

Se ha producido una infracción de simultaneidad optimista.

Comentarios

Llame al SaveChanges(SaveOptions) método en su lugar.

Se aplica a

SaveChanges(SaveOptions)

Conserva todas las actualizaciones al origen de datos con el SaveOptions especificado.

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

Valor de SaveOptions que determina el comportamiento de la operación.

Devoluciones

Número de objetos que tenían el estado Added, Modified o Deleted cuando se llamó al método SaveChanges().

Excepciones

Se ha producido una infracción de simultaneidad optimista.

Comentarios

Use esta sobrecarga específica de para asegurarse de SaveChanges que DetectChanges se llama a antes de guardar los cambios en el origen de datos o que AcceptAllChanges se llama después de guardar los cambios en el origen de datos.

Esta enumeración tiene un objeto FlagsAttribute que permite una combinación bit a bit de sus valores de miembro.

Para asegurarse de que la lógica del origen de datos ha actualizado los objetos del cliente, puede llamar al Refresh método con el StoreWins valor después de llamar a SaveChanges. El SaveChanges método funciona en una transacción. SaveChanges revertirá esa transacción y producirá una excepción si no se puede conservar alguno de los objetos desfasados ObjectStateEntry .

Si se ha producido una infracción de simultaneidad optimista, se genera una OptimisticConcurrencyException. 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. Para obtener más información, vea Cómo: Administrar la simultaneidad de datos en el contexto de objeto.

Se aplica a