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
Ten przykład próbuje zapisać zmiany, co może spowodować 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 obiektów nie może być utrwalone ObjectStateEntry .
Jeśli wystąpiło optymistyczne naruszenie współbieżności, OptimisticConcurrencyException zgłaszany jest błąd . Można rozwiązać problem z optymistycznym naruszeniem współbieżności, przechwytując je, wywołując Refresh metodę z wartością StoreWins lub ClientWins , a następnie wywołując SaveChanges ją 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
element , śledzenie zmian we wszystkich obiektach zostanie zresetowane po SaveChanges(Boolean) zakończeniu. Jeśli false
, 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
Zamiast tego wywołaj metodę SaveChanges(SaveOptions) .
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 elementu , aby upewnić się, że DetectChanges jest wywoływana przed zapisanie zmian w źródle danych lub wywoływana AcceptAllChanges po zapisaniu zmian w źródle danych.
Ta wyliczenie ma wartość FlagsAttribute , która umożliwia bitową kombinację 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 którykolwiek z zanieczyszczonych obiektów nie może być utrwalone ObjectStateEntry .
Jeśli wystąpiło optymistyczne naruszenie współbieżności, OptimisticConcurrencyException zgłaszany jest błąd . Można rozwiązać optymistyczne naruszenie współbieżności, przechwytując go, 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).
Dotyczy
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla