ObjectContext.SaveChanges Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Utrwala wszystkie aktualizacje źródła danych.
Przeciążenia
SaveChanges() |
Utrwala wszystkie aktualizacje źródła danych i resetuje śledzenie zmian w kontekście obiektu. |
SaveChanges(Boolean) |
Przestarzałe.
Utrwala wszystkie aktualizacje źródła danych i opcjonalnie resetuje śledzenie zmian w kontekście obiektu. |
SaveChanges(SaveOptions) |
Utrwala wszystkie aktualizacje źródła danych przy użyciu określonego SaveOptionselementu . |
SaveChanges()
Utrwala wszystkie aktualizacje źródła danych i resetuje śledzenie zmian w kontekście obiektu.
public:
int SaveChanges();
public int SaveChanges ();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer
Zwraca
Liczba obiektów w Addedstanie , Modifiedlub Deleted , gdy SaveChanges() została wywołana.
Wyjątki
W źródle danych wystąpiło optymistyczne naruszenie współbieżności.
Przykłady
W tym przykładzie próbuje zapisać zmiany, które mogą powodować konflikt współbieżności. Następnie pokazuje, jak rozwiązać konflikt współbieżności, odświeżając kontekst obiektu przed ponownym zapisaniem zmian.
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());
}
}
Uwagi
Aby upewnić się, że obiekty na kliencie zostały zaktualizowane przez logikę po stronie źródła danych, możesz wywołać metodę Refresh z wartością StoreWins po wywołaniu SaveChangesmetody . Aby uzyskać więcej informacji, zobacz Zapisywanie zmian i zarządzanie współbieżnością.
SaveChanges działa w ramach transakcji. SaveChanges spowoduje wycofanie tej transakcji i zgłoszenie wyjątku, jeśli którykolwiek z zanieczyszczonych ObjectStateEntry obiektów nie może być utrwalone.
Jeśli wystąpiło optymistyczne naruszenie współbieżności, OptimisticConcurrencyException zostanie zgłoszony błąd. Można rozwiązać optymistyczne naruszenie współbieżności, przechwytując ją, wywołując metodę Refresh z wartością StoreWins lub ClientWins , a następnie wywołując SaveChanges ponownie. Aby uzyskać więcej informacji, zobacz How to: Manage Data Concurrency in the Object Context (Jak zarządzać współbieżnością danych w kontekście obiektu).
Zobacz też
Dotyczy
SaveChanges(Boolean)
Przestroga
Use SaveChanges(SaveOptions options) instead.
Utrwala wszystkie aktualizacje źródła danych i opcjonalnie resetuje śledzenie zmian w kontekście obiektu.
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
Parametry
- acceptChangesDuringSave
- Boolean
Ten parametr jest wymagany do obsługi transakcji po stronie klienta. Jeśli true
funkcja śledzenia zmian we wszystkich obiektach zostanie zresetowana po SaveChanges(Boolean) zakończeniu. Jeśli false
element , należy wywołać metodę AcceptAllChanges() po SaveChanges(Boolean).
Zwraca
Liczba obiektów w Addedstanie , Modifiedlub Deleted , gdy SaveChanges() została wywołana.
- Atrybuty
Wyjątki
Wystąpiło optymistyczne naruszenie współbieżności.
Uwagi
Wywołaj metodę SaveChanges(SaveOptions) zamiast tego.
Dotyczy
SaveChanges(SaveOptions)
Utrwala wszystkie aktualizacje źródła danych przy użyciu określonego SaveOptionselementu .
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
Parametry
- options
- SaveOptions
SaveOptions Wartość określająca zachowanie operacji.
Zwraca
Liczba obiektów w Addedstanie , Modifiedlub Deleted , gdy SaveChanges() została wywołana.
Wyjątki
Wystąpiło optymistyczne naruszenie współbieżności.
Uwagi
Użyj tego konkretnego SaveChanges przeciążenia, aby upewnić się, że DetectChanges jest wywoływana przed zapisaniem zmian w źródle danych lub AcceptAllChanges wywoływanym po zapisaniu zmian w źródle danych.
Ta wyliczenie ma wartość FlagsAttribute , która umożliwia bitową kombinację jego wartości składowych.
Aby upewnić się, że obiekty na kliencie zostały zaktualizowane przez logikę po stronie źródła danych, możesz wywołać metodę Refresh z wartością StoreWins po wywołaniu SaveChangesmetody . Metoda SaveChanges działa w transakcji. SaveChanges spowoduje wycofanie tej transakcji i zgłoszenie wyjątku, jeśli nie można utrwalić żadnego z zanieczyszczonych ObjectStateEntry obiektów.
Jeśli wystąpiło optymistyczne naruszenie współbieżności, OptimisticConcurrencyException zostanie zgłoszony błąd. Można rozwiązać optymistyczne naruszenie współbieżności, przechwytując ją, wywołując Refresh metodę z wartościami StoreWins lub ClientWins , a następnie wywołując metodę SaveChanges ponownie. Aby uzyskać więcej informacji, zobacz How to: Manage Data Concurrency in the Object Context (Jak zarządzać współbieżnością danych w kontekście obiektu).