ObjectContext.SaveChanges Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Speichert alle Aktualisierungen der Datenquelle permanent.
Überlädt
SaveChanges() |
Speichert alle Aktualisierungen der Datenquelle permanent und setzt die Änderungsnachverfolgung im Objektkontext zurück. |
SaveChanges(Boolean) |
Veraltet.
Speichert alle Aktualisierungen der Datenquelle permanent und setzt optional die Änderungsnachverfolgung im Objektkontext zurück. |
SaveChanges(SaveOptions) |
Speichert alle Aktualisierungen der Datenquelle permanent mit dem angegebenen SaveOptions. |
SaveChanges()
Speichert alle Aktualisierungen der Datenquelle permanent und setzt die Änderungsnachverfolgung im Objektkontext zurück.
public:
int SaveChanges();
public int SaveChanges ();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer
Gibt zurück
Die Anzahl von Objekten im Status Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.
Ausnahmen
In der Datenquelle wurde die vollständige Parallelität verletzt.
Beispiele
Im diesem Beispiel wird versucht, Änderungen zu speichern, die möglicherweise einen Parallelitätskonflikt verursachen. Anschließend wird gezeigt, wie der Parallelitätskonflikt gelöst wird, indem der Objektkontext aktualisiert wird, bevor die Änderungen erneut gespeichert werden.
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());
}
}
Hinweise
Um sicherzustellen, dass Objekte auf dem Client von datenquellenseitiger Logik aktualisiert wurden, können Sie die Refresh -Methode mit dem StoreWins -Wert aufrufen, nachdem Sie aufgerufen SaveChangeshaben. Weitere Informationen finden Sie unter Speichern von Änderungen und Verwalten von Parallelität.
SaveChanges innerhalb einer Transaktion ausgeführt wird. SaveChanges führt ein Rollback für diese Transaktion durch und löst eine Ausnahme aus, wenn eines der fehlerhaften ObjectStateEntry Objekte nicht beibehalten werden kann.
Wenn die vollständige Parallelität verletzt wurde, wird eine OptimisticConcurrencyException ausgelöst. Die Verletzung der vollständigen Parallelität kann aufgelöst werden, indem Sie sie abfangen, die Refresh-Methode mit dem Wert StoreWins oder ClientWins aufrufen und anschließend SaveChanges erneut aufrufen. Weitere Informationen finden Sie unter How to: Manage Data Concurrency in the Object Context.For more information, see How to: Manage Data Parallelcurrency in the Object Context.
Weitere Informationen
Gilt für:
SaveChanges(Boolean)
Achtung
Use SaveChanges(SaveOptions options) instead.
Speichert alle Aktualisierungen der Datenquelle permanent und setzt optional die Änderungsnachverfolgung im Objektkontext zurück.
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
Parameter
- acceptChangesDuringSave
- Boolean
Dieser Parameter wird für clientseitige Transaktionsunterstützung benötigt. Wenn true
festgelegt ist, wird die Änderungsnachverfolgung für alle Objekte nach Abschluss von SaveChanges(Boolean) zurückgesetzt. Wenn false
festgelegt ist, muss die AcceptAllChanges()-Methode nach SaveChanges(Boolean) aufgerufen werden.
Gibt zurück
Die Anzahl von Objekten im Status Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.
- Attribute
Ausnahmen
Die vollständige Parallelität wurde verletzt.
Hinweise
Rufen Sie stattdessen die SaveChanges(SaveOptions) -Methode auf.
Gilt für:
SaveChanges(SaveOptions)
Speichert alle Aktualisierungen der Datenquelle permanent mit dem angegebenen 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
Parameter
- options
- SaveOptions
Ein SaveOptions-Wert, der das Verhalten des Vorgangs bestimmt.
Gibt zurück
Die Anzahl von Objekten im Status Added, Modified oder Deleted, als SaveChanges() aufgerufen wurde.
Ausnahmen
Die vollständige Parallelität wurde verletzt.
Hinweise
Verwenden Sie diese spezifische Überladung von, SaveChanges um sicherzustellen, dass entweder aufgerufen wird, DetectChanges bevor Sie Änderungen an der Datenquelle speichern, oder die aufgerufen wird, AcceptAllChanges nachdem Sie Änderungen an der Datenquelle gespeichert haben.
Diese Enumeration verfügt über eine FlagsAttribute , die eine bitweise Kombination ihrer Memberwerte zulässt.
Um sicherzustellen, dass Objekte auf dem Client von der datenquellenseitigen Logik aktualisiert wurden, können Sie die Refresh -Methode mit dem StoreWins -Wert aufrufen, nachdem Sie aufgerufen SaveChangeshaben. Die SaveChanges -Methode wird in einer Transaktion ausgeführt. SaveChanges führt ein Rollback für diese Transaktion durch und löst eine Ausnahme aus, wenn eines der fehlerhaften ObjectStateEntry Objekte nicht beibehalten werden kann.
Wenn die vollständige Parallelität verletzt wurde, wird eine OptimisticConcurrencyException ausgelöst. Die Verletzung der vollständigen Parallelität kann aufgelöst werden, indem Sie sie abfangen, die Refresh-Methode mit dem Wert StoreWins oder ClientWins aufrufen und anschließend die SaveChanges-Methode erneut aufrufen. Weitere Informationen finden Sie unter How to: Manage Data Concurrency in the Object Context.For more information, see How to: Manage Data Parallelcurrency in the Object Context.