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
| Nombre | Description |
|---|---|
| SaveChanges() |
Conserva todas las actualizaciones del origen de datos y restablece el seguimiento de cambios en el contexto del objeto. |
| SaveChanges(Boolean) |
Obsoletos.
Conserva todas las actualizaciones del origen de datos y, opcionalmente, restablece el seguimiento de cambios en el contexto del objeto. |
| SaveChanges(SaveOptions) |
Conserva todas las actualizaciones del origen de datos con el especificado SaveOptions. |
SaveChanges()
Conserva todas las actualizaciones del 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 en un Addedestado , Modifiedo Deleted cuando SaveChanges() se llamó a .
Excepciones
Se ha producido una infracción de simultaneidad optimista en el origen de datos.
Ejemplos
En este ejemplo se intentan guardar los cambios, lo que puede provocar 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 la lógica del origen de datos actualizó los objetos del cliente, puede llamar al Refresh método con el StoreWins valor después de llamar a SaveChanges.
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 produce una OptimisticConcurrencyException excepción . Puede resolver una infracción de simultaneidad optimista si la detecta, llama al Refresh método con el StoreWins valor o ClientWins y, a continuación, vuelve a llamar a SaveChanges .
Consulte también
Se aplica a
SaveChanges(Boolean)
Precaución
Use SaveChanges(SaveOptions options) instead.
Conserva todas las actualizaciones del 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 del lado cliente. Si truees , el seguimiento de cambios en todos los objetos se restablece después SaveChanges(Boolean) de finalizar. Si falsees , debe llamar al AcceptAllChanges() método después SaveChanges(Boolean)de .
Devoluciones
Número de objetos en un Addedestado , Modifiedo Deleted cuando SaveChanges() se llamó a .
- 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 del origen de datos con el especificado 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
Valor SaveOptions que determina el comportamiento de la operación.
Devoluciones
Número de objetos en un Addedestado , Modifiedo Deleted cuando SaveChanges() se llamó a .
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 que FlagsAttribute permite una combinación bit a bit de sus valores de miembro.
Para asegurarse de que la lógica del origen de datos actualizó 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 sucios ObjectStateEntry .
Si se ha producido una infracción de simultaneidad optimista, se produce una OptimisticConcurrencyException excepción . Puede resolver una infracción de simultaneidad optimista si la detecta, llama al Refresh método con los StoreWins valores o ClientWins y, a continuación, vuelve a llamar al SaveChanges método .