4

切断されたシナリオで作業していますが、オブジェクトコンテキストを破棄しても、アタッチされたエンティティが解放されないことに気付きました。その結果、これが原因で後続の操作が失敗することがよくあります。

したがって、これを解決するために、オブジェクトコンテキストが破棄されているときに、すべてを自分で切り離します。

public void Dispose()
{
   // detaching is not really needed, because we have short living object contexts
   var objectStateEntries = 
       _context.UnderlyingContext.ObjectStateManager.GetObjectStateEntries(EntityState.Unchanged);           
   objectStateEntries.ToList().ForEach(o => { if (o.Entity != null)
   {                
     _context.UnderlyingContext.Detach(o.Entity);               
   }});            

   _context.Dispose();
   _context = null;    
}

ただし、オブジェクトグラフが完全に切り離されるという副作用がありますが、グラフを保持したいのです。

これに対する解決策が見つからないようですが、それができないのは本当ですか?

4

1 に答える 1

1

この問題もありました。グラフの一部をEFコンテキストにアタッチすることはできません。最初は切り離された状態でデータをロードすることを検討しましたか?その後、コンテキストはデータのステートレスリポジトリとして使用され、他には何も使用されません。

次のように、最初にデタッチされたデータをロードできます。

myDataContext.MyEntitySet.MergeOption = MergeOption.NoTracking;
于 2011-06-16T11:21:23.360 に答える