ObjectContext.SaveChanges 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
持續保存所有資料來源的更新。
多載
| 名稱 | Description |
|---|---|
| SaveChanges() |
持續保存所有資料來源的更新,並在物件上下文中重置變更追蹤。 |
| SaveChanges(Boolean) |
已淘汰.
持久化所有資料來源更新,並可選擇性地在物件上下文中重置變更追蹤。 |
| SaveChanges(SaveOptions) |
以指定的 SaveOptions. 持續化所有資料來源的更新。 |
SaveChanges()
持續保存所有資料來源的更新,並在物件上下文中重置變更追蹤。
public:
int SaveChanges();
public int SaveChanges();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer
傳回
當 、 或 DeletedSaveChanges() 狀態被呼叫時,物件的AddedModified數量。
例外狀況
資料來源中發生了樂觀並行違規。
範例
此範例嘗試儲存變更,可能導致並行衝突。 接著,它示範如何在重新儲存變更前,透過刷新物件上下文來解決並行衝突。
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在呼叫 SaveChanges之後呼叫 該方法,並使用該StoreWins值。
SaveChanges 在交易中運作。 SaveChanges 如果有任何髒物件 ObjectStateEntry 無法持久化,就會回滾該交易並拋出例外。
若發生樂觀並行違規,則拋出 a OptimisticConcurrencyException 。 你可以透過捕捉並行違規,呼叫 Refresh or StoreWinsClientWins 值的方法,然後再呼叫 SaveChanges 一次來解決。
另請參閱
適用於
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,則必須在 後SaveChanges(Boolean)呼叫該AcceptAllChanges()方法 。
傳回
當 、 或 DeletedSaveChanges() 狀態被呼叫時,物件的AddedModified數量。
- 屬性
例外狀況
發生了樂觀並發違規。
備註
直接打電話 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 決定操作行為的值。
傳回
當 、 或 DeletedSaveChanges() 狀態被呼叫時,物件的AddedModified數量。
例外狀況
發生了樂觀並發違規。
備註
利用這個特定的超載 SaveChanges 來確保 DetectChanges 在儲存變更到資料來源前被呼叫,或 AcceptAllChanges 是在儲存變更後才呼叫。
此枚舉有 FlagsAttribute 允許其成員值的位元組合。
為了確保客戶端物件已被資料來源端邏輯更新,你可以Refresh在呼叫 SaveChanges後呼叫 該方法。StoreWins 此 SaveChanges 方法在交易中運作。 SaveChanges 如果任何一個髒物件 ObjectStateEntry 無法被持久化,就會回滾該交易並拋出例外。
若發生樂觀並行違規,則拋出 a OptimisticConcurrencyException 。 你可以透過捕捉它,呼叫帶有 StoreWins or ClientWins 值的方法Refresh,然後再呼叫該SaveChanges方法來解決樂觀並行違規。