ObjectContext.SaveChanges Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.