ObjectContext.Refresh 方法

定義

使用資料來源中的資料,更新物件內容中的特定物件。

多載

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 ,物件的原始值一律會以數據源值更新,但目前的值可能會或可能不會以數據源值更新。 這會因 RefreshMode 值而不同。 模式 StoreWins 表示應該更新集合中的物件,以符合數據源值。 ClientWins 表示即使數據源中有其他變更,仍只會保存物件內容中的變更。

若要確保物件已經由資料來源端邏輯所更新,您可以在呼叫 Refresh 方法之後,使用 StoreWins 來呼叫 SaveChanges

另請參閱

適用於

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

要重新整理的物件。

例外狀況

collectionnull

refreshMode 無效。

collection 是空的。

-或-

物件沒有附加至內容。

範例

此範例會嘗試儲存變更,這可能會導致並行衝突。 然後,它會示範如何透過重新整理物件內容,然後重新儲存變更,解決並行衝突。

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 值表示只會保存物件內容中的變更,即使資料來源中已經有其他變更也一樣。

若要確保物件已經由資料來源端邏輯所更新,您可以在呼叫 Refresh 方法之後,使用 StoreWins 值來呼叫 SaveChanges 方法。

另請參閱

適用於