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.
Rende persistenti tutti gli aggiornamenti all'origine dati.
Overload
SaveChanges() |
Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta il rilevamento delle modifiche nel contesto dell'oggetto. |
SaveChanges(Boolean) |
Obsoleti.
Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta facoltativamente il rilevamento delle modifiche nel contesto dell'oggetto. |
SaveChanges(SaveOptions) |
Rende persistenti tutti gli aggiornamenti all'origine dati con l'oggetto SaveOptions specificato. |
SaveChanges()
Rende persistenti 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
Restituisce
Il numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().
Eccezioni
Si è verificata una violazione di concorrenza ottimistica nell'origine dati.
Esempio
In questo esempio si tenta di salvare modifiche che possono provocare un conflitto di concorrenza. Viene quindi illustrato come risolvere il conflitto di concorrenza aggiornando il contesto dell'oggetto prima di salvare nuovamente 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 essere certi che gli oggetti presenti nel client siano stati aggiornati in base alla logica lato origine dei dati, è possibile chiamare il metodo Refresh con il valore StoreWins dopo la chiamata a SaveChanges. Per altre informazioni, vedere Salvataggio delle modifiche e gestione della concorrenza.
SaveChanges opera all'interno di una transazione. SaveChanges eseguirà il rollback della transazione e genererà un'eccezione se uno degli oggetti sporchi ObjectStateEntry non può essere mantenuto.
Se si è verificata una violazione della concorrenza ottimistica, viene generata un'eccezione OptimisticConcurrencyException. È possibile risolvere una violazione della concorrenza ottimistica rilevandola, chiamando il metodo Refresh con il valore StoreWins o ClientWins e quindi chiamando nuovamente SaveChanges. Per altre informazioni, vedere Procedura: Gestire la concorrenza dei dati nel contesto dell'oggetto.
Vedi anche
Si applica a
SaveChanges(Boolean)
Attenzione
Use SaveChanges(SaveOptions options) instead.
Rende persistenti tutti gli aggiornamenti all'origine dati e reimposta facoltativamente 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 il valore è true
, il rilevamento delle modifiche in tutti gli oggetti viene reimpostato dopo il completamento del metodo SaveChanges(Boolean). Se il valore è false
, è necessario chiamare il metodo AcceptAllChanges() dopo SaveChanges(Boolean).
Restituisce
Il numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().
- Attributi
Eccezioni
Se si è verificata una violazione della concorrenza ottimistica.
Commenti
Chiamare invece il SaveChanges(SaveOptions) metodo.
Si applica a
SaveChanges(SaveOptions)
Rende persistenti tutti gli aggiornamenti all'origine dati con l'oggetto SaveOptions specificato.
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 di SaveOptions che determina il comportamento dell'operazione.
Restituisce
Il numero di oggetti che si trovano nello stato Added, Modified o Deleted al momento della chiamata a SaveChanges().
Eccezioni
Se si è verificata una violazione della concorrenza ottimistica.
Commenti
Usare questo overload specifico di per assicurarsi che DetectChanges venga chiamato prima di SaveChanges salvare le modifiche all'origine dati o che AcceptAllChanges viene chiamato dopo aver salvato le modifiche all'origine dati.
Questa enumerazione ha un FlagsAttribute oggetto 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 metodo con il RefreshStoreWins valore dopo la chiamata SaveChanges. Il SaveChanges metodo opera in una transazione. SaveChanges eseguirà il rollback della transazione e genererà un'eccezione se uno degli oggetti sporchi ObjectStateEntry non può essere mantenuto.
Se si è verificata una violazione della concorrenza ottimistica, viene generata un'eccezione OptimisticConcurrencyException. È possibile risolvere una violazione della concorrenza ottimistica rilevandola, chiamando il metodo Refresh con i valori StoreWins o ClientWins e quindi chiamando nuovamente il metodo SaveChanges. Per altre informazioni, vedere Procedura: Gestire la concorrenza dei dati nel contesto dell'oggetto.