ObjectContext.Refresh 方法

定義

用資料來源更新物件上下文中的特定物件。

多載

名稱 Description
Refresh(RefreshMode, IEnumerable)

以資料來源資料更新物件上下文中的一組物件。

Refresh(RefreshMode, Object)

在物件上下文中更新物件,並使用資料來源的資料。

備註

物件刷新的順序是非確定性的。

Refresh(RefreshMode, IEnumerable)

以資料來源資料更新物件上下文中的一組物件。

public:
 void Refresh(System::Data::Objects::RefreshMode refreshMode, System::Collections::IEnumerable ^ collection);
public void Refresh(System.Data.Objects.RefreshMode refreshMode, System.Collections.IEnumerable collection);
member this.Refresh : System.Data.Objects.RefreshMode * System.Collections.IEnumerable -> unit
Public Sub Refresh (refreshMode As RefreshMode, collection As IEnumerable)

參數

refreshMode
RefreshMode

一個 RefreshMode 表示物件上下文中屬性變更是否被資料來源屬性值覆蓋的值。

collection
IEnumerable

IEnumerable 堆物品可以刷新。

例外狀況

collectionnull

refreshMode 不成立。

collection 空無一人。

-或-

物件不會附加於上下文。

備註

此方法具有雙重目的:一是允許物件上下文中以資料來源資料刷新,二是解決衝突的機制。

物件刷新的順序是非確定性的。

呼叫 後 Refresh ,物件的原始值會隨資料來源值更新,但目前值可能會或不會更新。 這取決於價值。RefreshModeStoreWins 模式表示集合中的物件應更新以匹配資料來源值。 ClientWins 這表示即使資料來源有其他變更,只有物件上下文中的變更會被持久化。

為了確保物件已被資料來源端邏輯更新,你可以在呼叫SaveChanges方法後再呼叫 RefreshStoreWins

另請參閱

適用於

Refresh(RefreshMode, Object)

在物件上下文中更新物件,並使用資料來源的資料。

public:
 void Refresh(System::Data::Objects::RefreshMode refreshMode, System::Object ^ entity);
public void Refresh(System.Data.Objects.RefreshMode refreshMode, object entity);
member this.Refresh : System.Data.Objects.RefreshMode * obj -> unit
Public Sub Refresh (refreshMode As RefreshMode, entity As Object)

參數

refreshMode
RefreshMode

其中一個RefreshMode值指定了用哪種模式來刷新。ObjectStateManager

entity
Object

要刷新的物件。

例外狀況

refreshMode 不成立。

物件不會附加於上下文。

範例

此範例嘗試儲存變更,這可能導致並行衝突。 接著它會示範如何在重新儲存變更前,透過刷新物件上下文來解決並行衝突。

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 其雙重目的是允許物件以資料來源的資料重新更新,以及作為解決衝突的機制。

物件刷新的順序是非確定性的。

在呼叫該方法後 Refresh ,物件的原始值會隨資料來源值更新,但目前的值可能會或不會隨資料來源值更新。 這取決於 RefreshMode。 模式 StoreWins 表示物件應更新以符合資料來源的值。 這個 ClientWins 值表示,即使資料來源有其他變更,物件上下文中的變更也會被持久化。

為了確保物件已被資料來源端邏輯更新,你可以在呼叫SaveChanges方法後再呼叫Refresh該方法。StoreWins

另請參閱

適用於