2011-10-22 20 views

答えて

13

DbContextにはRefreshメソッドがありません。 IObjectContextAdapterインターフェイスを使用して、基礎となるObjectContextを取得し、その上でRefreshを呼び出すことができます。ここで

ます。また、プロキシオブジェクトにリロード機能を使用することができます
var objectContext = ((IObjectContextAdapter)context).ObjectContext; 
+0

名誉 "崇拝"、あなたは私のためにその日を保存しました。この質問には、* LOTS *の回答があり、あなたのものはずっと最高です!本当にDbContextがRefreshを直接サポートしていないのは本当に悪いですか?これは、マルチティアアプリケーションでは非常に一般的なパターンであると思われます。私はちょうどオブジェクトを読み込んで、あなたの答えを見る前に変更されたものをコピーすることに近づいていました:-) – Joe

2

は...すべての変更されたオブジェクトを再ロードするためのサンプルです:

  var modifiedEntries = context.ChangeTracker.Entries() 
       .Where(e => e.State == EntityState.Modified); 
      foreach (var modifiedEntry in modifiedEntries) { 
       modifiedEntry.Reload(); 
      } 
0

このスレッドに投稿された答えはあまりにも役立つかもしれない:Refresh entity instance with DbContext要約すると

しかし、次のようなものを呼び出してみてください:

dbContext.Entry(someEntityObjectInstance).Reload(); 

しかし、これはナビゲーションプロパティをリフレッシュしないことに気づいているので、ナビゲーションプロパティを更新することについても心配する必要がある場合は、すべてのナビゲーションプロパティを再ロードするか、 ()またはRefresh()をIObjectContextAdapterにキャストした後、または単にDbContextを再作成してください。私の場合は

、私は率直に言って)それだけで(コンテキストを再作成して再検索することが最善と判断しました実体:

dbContext = new Model.Entities(); 
someEntityObjectInstance = dbContext.SomeEntityType.Find(someEntityObjectInstanceKey); 

ここには、単純な/最良の答えは間違いなくありません。