ObjectContext.SaveChanges 方法

定義

將所有更新保存至資料來源。

多載

SaveChanges()

將所有更新保存至資料來源並且重設物件內容中的變更追蹤。

SaveChanges(Boolean)
已淘汰.

將所有更新保存至資料來源,並且選擇性地重設物件內容中的變更追蹤。

SaveChanges(SaveOptions)

使用指定的 SaveOptions,將所有更新保存至資料來源。

SaveChanges()

將所有更新保存至資料來源並且重設物件內容中的變更追蹤。

public:
 int SaveChanges();
public int SaveChanges ();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer

傳回

呼叫 Added 時處於 ModifiedDeletedSaveChanges() 狀態中的物件數目。

例外狀況

在資料來源中已經發生開放式並行存取 (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。 您可以透過攔截開放式並行存取違規、使用 RefreshStoreWins 值來呼叫 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 時處於 ModifiedDeletedSaveChanges() 狀態中的物件數目。

屬性

例外狀況

已經發生開放式並行存取違規。

備註

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 時處於 ModifiedDeletedSaveChanges() 狀態中的物件數目。

例外狀況

已經發生開放式並行存取違規。

備註

使用此 特定的 多載 SaveChanges ,確定 DetectChanges 在您儲存資料來源的變更之前呼叫 ,或 AcceptAllChanges 是在您將變更儲存至資料來源之後呼叫。

這個列舉具有 , FlagsAttribute 允許其成員值的位元組合。

若要確定用戶端上的物件已由資料來源端邏輯更新,您可以在呼叫 之後使用 StoreWins 值呼叫 RefreshSaveChanges 方法。 方法 SaveChanges 會在交易中運作。 SaveChanges 將會回復該交易,並在其中一個中途 ObjectStateEntry 物件無法保存時擲回例外狀況。

如果已經發生開放式並行存取違規,就會擲回 OptimisticConcurrencyException。 您可以透過攔截開放式並行存取違規、使用 RefreshStoreWins 值來呼叫 ClientWins 方法,然後再次呼叫 SaveChanges 方法,解決開放式並行存取違規。 如需詳細資訊,請參閱 How to: Manage Data Concurrency in the Object CoNtext

適用於