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调用 方法后,对象的原始值将始终使用数据源值进行更新,但当前值可能更新,也可能不使用数据源值进行更新。 这取决于 RefreshModeStoreWins 模式意味着应将对象更新为与数据源值匹配。 ClientWins 值意味着仅保持对象上下文中的更改,即使数据源中发生了其他更改也是如此。

若要确保已由数据源端逻辑更新了对象,可以在调用 Refresh 方法后,使用 StoreWins 值调用 SaveChanges 方法。

另请参阅

适用于