ObjectContext.Refresh 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
用資料來源更新物件上下文中的特定物件。
多載
| 名稱 | 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 堆物品可以刷新。
例外狀況
collection 為 null。
refreshMode 不成立。
備註
此方法具有雙重目的:一是允許物件上下文中以資料來源資料刷新,二是解決衝突的機制。
物件刷新的順序是非確定性的。
呼叫 後 Refresh ,物件的原始值會隨資料來源值更新,但目前值可能會或不會更新。 這取決於價值。RefreshMode 此 StoreWins 模式表示集合中的物件應更新以匹配資料來源值。 ClientWins 這表示即使資料來源有其他變更,只有物件上下文中的變更會被持久化。
為了確保物件已被資料來源端邏輯更新,你可以在呼叫SaveChanges方法後再呼叫 Refresh 。StoreWins
另請參閱
適用於
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