ObjectContext.SaveChanges 方法

定義

持續保存所有資料來源的更新。

多載

名稱 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後呼叫 該方法。StoreWinsSaveChanges 方法在交易中運作。 SaveChanges 如果任何一個髒物件 ObjectStateEntry 無法被持久化,就會回滾該交易並拋出例外。

若發生樂觀並行違規,則拋出 a OptimisticConcurrencyException 。 你可以透過捕捉它,呼叫帶有 StoreWins or ClientWins 值的方法Refresh,然後再呼叫該SaveChanges方法來解決樂觀並行違規。

適用於