ObjectContext.SaveChanges Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Zachová všechny aktualizace zdroje dat.
Přetížení
| Name | Description |
|---|---|
| SaveChanges() |
Zachovává všechny aktualizace zdroje dat a resetuje sledování změn v kontextu objektu. |
| SaveChanges(Boolean) |
Zastaralé.
Zachová všechny aktualizace zdroje dat a volitelně resetuje sledování změn v kontextu objektu. |
| SaveChanges(SaveOptions) |
Zachová všechny aktualizace zdroje dat se zadaným SaveOptionskódem . |
SaveChanges()
Zachovává všechny aktualizace zdroje dat a resetuje sledování změn v kontextu objektu.
public:
int SaveChanges();
public int SaveChanges();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer
Návraty
Početobjektůch AddedModifiedDeletedSaveChanges()
Výjimky
Ve zdroji dat došlo k porušení optimistické souběžnosti.
Příklady
Tento příklad se pokusí uložit změny, což může způsobit konflikt souběžnosti. Pak ukazuje, jak vyřešit konflikt souběžnosti aktualizací kontextu objektu před opětovným uložením změn.
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());
}
}
Poznámky
Chcete-li zajistit, aby objekty v klientovi byly aktualizovány logikou na straně zdroje dat, můžete volat Refresh metodu StoreWins s hodnotou po volání SaveChanges.
SaveChanges funguje v rámci transakce. SaveChanges vrátí zpět danou transakci a vyvolá výjimku, pokud některý z nezašpiněných ObjectStateEntry objektů nelze zachovat.
Pokud došlo k porušení optimistické souběžnosti, vyvolá se chyba OptimisticConcurrencyException . Porušení optimistické souběžnosti můžete vyřešit tak, že ji zachytíte, zavoláte metodu RefreshStoreWins s hodnotou nebo ClientWins ji pak znovu zavoláte SaveChanges .
Viz také
Platí pro
SaveChanges(Boolean)
Upozornění
Use SaveChanges(SaveOptions options) instead.
Zachová všechny aktualizace zdroje dat a volitelně resetuje sledování změn v kontextu objektu.
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
Tento parametr je nutný pro podporu transakcí na straně klienta. Pokud truese sledování změn u všech objektů po dokončení resetuje SaveChanges(Boolean) . Pokud false, musíte zavolat metodu AcceptAllChanges() za SaveChanges(Boolean).
Návraty
Početobjektůch AddedModifiedDeletedSaveChanges()
- Atributy
Výjimky
Došlo k porušení optimistické souběžnosti.
Poznámky
Místo toho volejte metodu SaveChanges(SaveOptions) .
Platí pro
SaveChanges(SaveOptions)
Zachová všechny aktualizace zdroje dat se zadaným SaveOptionskódem .
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
Hodnota SaveOptions , která určuje chování operace.
Návraty
Početobjektůch AddedModifiedDeletedSaveChanges()
Výjimky
Došlo k porušení optimistické souběžnosti.
Poznámky
Pomocí tohoto konkrétního SaveChanges přetížení se ujistěte, že DetectChanges je volána před uložením změn ve zdroji dat, nebo se AcceptAllChanges volá po uložení změn ve zdroji dat.
Tento výčet obsahuje FlagsAttribute bitové kombinace hodnot členů.
Chcete-li zajistit, aby objekty v klientovi byly aktualizovány logikou na straně zdroje dat, můžete metodu RefreshStoreWins volat s hodnotou po volání SaveChanges. Metoda SaveChanges pracuje v transakci. SaveChanges vrátí zpět danou transakci a vyvolá výjimku, pokud některý z nezašpiněných ObjectStateEntry objektů nelze zachovat.
Pokud došlo k porušení optimistické souběžnosti, vyvolá se chyba OptimisticConcurrencyException . Porušení optimistické souběžnosti můžete vyřešit zachycením metody, voláním Refresh metody s StoreWins hodnotami ClientWins a opětovným voláním SaveChanges metody.