ObjectContext.SaveChanges 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將所有更新保存至資料來源。
多載
SaveChanges() |
將所有更新保存至資料來源並且重設物件內容中的變更追蹤。 |
SaveChanges(Boolean) |
已淘汰.
將所有更新保存至資料來源,並且選擇性地重設物件內容中的變更追蹤。 |
SaveChanges(SaveOptions) |
使用指定的 SaveOptions,將所有更新保存至資料來源。 |
SaveChanges()
將所有更新保存至資料來源並且重設物件內容中的變更追蹤。
public:
int SaveChanges();
public int SaveChanges ();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer
傳回
呼叫 Added 時處於 Modified、Deleted 或 SaveChanges() 狀態中的物件數目。
例外狀況
在資料來源中已經發生開放式並行存取 (Optimistic Concurrency) 違規。
範例
這個範例會嘗試儲存可能導致並行衝突的變更。 然後,它會示範如何透過重新整理物件內容,然後重新儲存變更,解決並行衝突。
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());
}
}
備註
若要確保用戶端的物件已經由資料來源端邏輯所更新,您可以在呼叫 Refresh 之後,使用 StoreWins 值來呼叫 SaveChanges 方法。 如需詳細資訊,請參閱 儲存變更和管理並行存取。
SaveChanges 會在交易內運作。 SaveChanges 將會回復該交易,並在無法保存任何中途 ObjectStateEntry 物件時擲回例外狀況。
如果已經發生開放式並行存取違規,就會擲回 OptimisticConcurrencyException。 您可以透過攔截開放式並行存取違規、使用 Refresh 或 StoreWins 值來呼叫 ClientWins 方法,然後再次呼叫 SaveChanges,解決開放式並行存取違規。 如需詳細資訊,請參閱 How to: Manage Data Concurrency in the Object Context。
另請參閱
適用於
SaveChanges(Boolean)
警告
Use SaveChanges(SaveOptions options) instead.
將所有更新保存至資料來源,並且選擇性地重設物件內容中的變更追蹤。
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
參數
- acceptChangesDuringSave
- Boolean
用戶端交易支援需要這個參數。 如果為 true
,就會在 SaveChanges(Boolean) 完成之後,重設所有物件的變更追蹤。 如果為 false
,您就必須在 AcceptAllChanges() 之後呼叫 SaveChanges(Boolean) 方法。
傳回
呼叫 Added 時處於 Modified、Deleted 或 SaveChanges() 狀態中的物件數目。
- 屬性
例外狀況
已經發生開放式並行存取違規。
備註
SaveChanges(SaveOptions)請改為呼叫 方法。
適用於
SaveChanges(SaveOptions)
使用指定的 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
參數
- options
- SaveOptions
決定作業行為的 SaveOptions 值。
傳回
呼叫 Added 時處於 Modified、Deleted 或 SaveChanges() 狀態中的物件數目。
例外狀況
已經發生開放式並行存取違規。
備註
使用此特定的 多載 SaveChanges ,確定 DetectChanges 在您儲存數據源的變更之前呼叫 ,或 AcceptAllChanges 是在您將變更儲存至數據源之後呼叫。
這個列舉具有 , FlagsAttribute 允許其成員值的位元組合。
若要確定用戶端上的物件已由數據源端邏輯更新,您可以在呼叫 之後使用 StoreWins 值呼叫 RefreshSaveChanges方法。 方法 SaveChanges 會在交易中運作。 SaveChanges 將會回復該交易,並在其中一個中途 ObjectStateEntry 對象無法保存時擲回例外狀況。
如果已經發生開放式並行存取違規,就會擲回 OptimisticConcurrencyException。 您可以透過攔截開放式並行存取違規、使用 Refresh 或 StoreWins 值來呼叫 ClientWins 方法,然後再次呼叫 SaveChanges 方法,解決開放式並行存取違規。 如需詳細資訊,請參閱 How to: Manage Data Concurrency in the Object Context。