ObjectContext.SaveChanges Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Salva in modo permanente tutti gli aggiornamenti all'origine dati.
Overload
| Nome | Descrizione |
|---|---|
| SaveChanges() |
Salva in modo permanente tutti gli aggiornamenti all'origine dati e reimposta il rilevamento delle modifiche nel contesto dell'oggetto. |
| SaveChanges(Boolean) |
Obsoleti.
Salva in modo permanente tutti gli aggiornamenti all'origine dati e, facoltativamente, reimposta il rilevamento delle modifiche nel contesto dell'oggetto. |
| SaveChanges(SaveOptions) |
Salva in modo permanente tutti gli aggiornamenti all'origine dati con l'oggetto specificato SaveOptions. |
SaveChanges()
Salva in modo permanente tutti gli aggiornamenti all'origine dati e reimposta il rilevamento delle modifiche nel contesto dell'oggetto.
public:
int SaveChanges();
public int SaveChanges();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer
Valori restituiti
Numero di oggetti in uno Addedstato , Modifiedo Deleted quando SaveChanges() è stato chiamato .
Eccezioni
Si è verificata una violazione della concorrenza ottimistica nell'origine dati.
Esempio
In questo esempio viene eseguito un tentativo di salvataggio delle modifiche, che può causare un conflitto di concorrenza. Viene quindi illustrato come risolvere il conflitto di concorrenza aggiornando il contesto dell'oggetto prima di salvare di nuovo le modifiche.
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());
}
}
Commenti
Per assicurarsi che gli oggetti nel client siano stati aggiornati dalla logica lato origine dati, è possibile chiamare il Refresh metodo con il StoreWins valore dopo aver chiamato SaveChanges.
SaveChanges opera all'interno di una transazione. SaveChanges eseguirà il rollback della transazione e genererà un'eccezione se uno degli oggetti dirty ObjectStateEntry non può essere salvato in modo permanente.
Se si è verificata una violazione della concorrenza ottimistica, viene generata un'eccezione OptimisticConcurrencyException . È possibile risolvere una violazione della concorrenza ottimistica intercettandola, chiamando il Refresh metodo con il StoreWins valore o ClientWins e quindi chiamando SaveChanges di nuovo.
Vedi anche
Si applica a
SaveChanges(Boolean)
Attenzione
Use SaveChanges(SaveOptions options) instead.
Salva in modo permanente tutti gli aggiornamenti all'origine dati e, facoltativamente, reimposta il rilevamento delle modifiche nel contesto dell'oggetto.
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
Parametri
- acceptChangesDuringSave
- Boolean
Questo parametro è necessario per il supporto delle transazioni lato client. Se true, il rilevamento delle modifiche in tutti gli oggetti viene reimpostato al SaveChanges(Boolean) termine. Se false, è necessario chiamare il AcceptAllChanges() metodo dopo SaveChanges(Boolean).
Valori restituiti
Numero di oggetti in uno Addedstato , Modifiedo Deleted quando SaveChanges() è stato chiamato .
- Attributi
Eccezioni
Si è verificata una violazione della concorrenza ottimistica.
Commenti
Chiamare invece il SaveChanges(SaveOptions) metodo .
Si applica a
SaveChanges(SaveOptions)
Salva in modo permanente tutti gli aggiornamenti all'origine dati con l'oggetto specificato 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 SaveOptions che determina il comportamento dell'operazione.
Valori restituiti
Numero di oggetti in uno Addedstato , Modifiedo Deleted quando SaveChanges() è stato chiamato .
Eccezioni
Si è verificata una violazione della concorrenza ottimistica.
Commenti
Usare questo overload specifico di SaveChanges per assicurarsi che venga chiamato prima di DetectChanges salvare le modifiche nell'origine dati o che AcceptAllChanges venga chiamato dopo aver salvato le modifiche all'origine dati.
Questa enumerazione ha un oggetto FlagsAttribute che consente una combinazione bit per bit dei relativi valori membro.
Per assicurarsi che gli oggetti nel client siano stati aggiornati dalla logica lato origine dati, è possibile chiamare il Refresh metodo con il StoreWins valore dopo aver chiamato SaveChanges. Il SaveChanges metodo opera in una transazione. SaveChanges eseguirà il rollback della transazione e genererà un'eccezione se uno degli oggetti dirty ObjectStateEntry non può essere salvato in modo permanente.
Se si è verificata una violazione della concorrenza ottimistica, viene generata un'eccezione OptimisticConcurrencyException . È possibile risolvere una violazione della concorrenza ottimistica intercettandola, chiamando il Refresh metodo con i StoreWins valori o ClientWins e quindi chiamando di nuovo il SaveChanges metodo .