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 が空です。

- または -

オブジェクトがコンテキストにアタッチされていません。

注釈

このメソッドには 2 つの目的があります。オブジェクト コンテキスト内のオブジェクトをデータ ソース内のデータで更新できるようにするという目的と、競合を解決するためのメカニズムとしての役割を果たすという目的です。 詳細については、「変更の 保存」と「コンカレンシーの管理」を参照してください。

オブジェクトの更新順序は非決定的です。

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 値のいずれか 1 つ。

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 には 2 つの目的があります。オブジェクトをデータ ソース内のデータで更新できるようにするという目的と、競合を解決するためのメカニズムとしての役割を果たすという目的です。 詳細については、「変更の 保存」と「コンカレンシーの管理」を参照してください。

オブジェクトの更新順序は非決定的です。

メソッドが Refresh 呼び出されると、オブジェクトの元の値は常にデータ ソース値で更新されますが、現在の値がデータ ソース値で更新される場合と更新されない場合があります。 更新されるかどうかは、RefreshMode で決まります。 StoreWins モードでは、オブジェクトがデータ ソースの値と一致するように更新されます。 ClientWins モードでは、データ ソースで他の変更が行われた場合でも、オブジェクト コンテキストでの変更のみが保存されます。

オブジェクトがデータ ソース側のロジックで更新されるようにするには、Refresh メソッドの呼び出し後に StoreWins 値を指定して SaveChanges メソッドを呼び出します。

こちらもご覧ください

適用対象