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 が無効です。
注釈
このメソッドには、オブジェクト コンテキスト内のオブジェクトをデータ ソースからのデータで更新し、競合を解決できるメカニズムを使用する 2 つの目的があります。
オブジェクトが更新される順序は非決定的です。
Refreshが呼び出されると、オブジェクトの元の値は常にデータ ソース値で更新されますが、現在の値がデータ ソース値で更新される場合と更新されない場合があります。 これは、 RefreshMode 値によって異なります。 StoreWins モードは、データ ソースの値と一致するようにコレクション内のオブジェクトを更新する必要があることを意味します。 ClientWins は、データ ソースに他の変更があった場合でも、オブジェクト コンテキストの変更のみが保持されることを意味します。
データ ソース側のロジックによってオブジェクトが更新されたことを確認するには、SaveChanges メソッドを呼び出した後、StoreWinsを使用してRefreshを呼び出すことができます。
こちらもご覧ください
適用対象
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
ObjectStateManagerの更新に使用するモードを指定するRefreshMode値の 1 つ。
- 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 には、オブジェクトをデータ ソースからのデータで更新し、競合を解決できるメカニズムであるという 2 つの目的があります。
オブジェクトが更新される順序は非決定的です。
Refresh メソッドが呼び出されると、オブジェクトの元の値は常にデータ ソース値で更新されますが、現在の値がデータ ソース値で更新される場合と更新されない場合があります。 これは RefreshModeによって異なります。 StoreWins モードは、データ ソースの値と一致するようにオブジェクトを更新する必要があることを意味します。 ClientWins値は、データ ソースに他の変更があった場合でも、オブジェクト コンテキストの変更のみが永続化されることを意味します。
データ ソース側のロジックによってオブジェクトが確実に更新されるようにするには、SaveChanges メソッドを呼び出した後、StoreWins値を使用して Refresh メソッドを呼び出します。