ObjectContext.Refresh 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
使用資料來源中的資料,更新物件內容中的特定物件。
多載
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 表示即使數據源中有其他變更,也只會保存對象內容中的變更。
若要確保物件已經由資料來源端邏輯所更新,您可以在呼叫 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
要重新整理的物件。
例外狀況
collection
為 null
。
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 值表示只會保存物件內容中的變更,即使資料來源中已經有其他變更也一樣。
若要確保物件已經由資料來源端邏輯所更新,您可以在呼叫 Refresh 方法之後,使用 StoreWins 值來呼叫 SaveChanges 方法。