6

EFのチェンジトラッキングと遅延読み込み機能のため、私のクエリの1つに問題があります。問題は、クエリの結果を取得した後、AutoMapperを使用してドメインオブジェクトをビジネスモデルにマップしていますが、コンテキストが破棄されているために例外がスローされ続けます。ObjectContextインスタンスが破棄され、接続が必要な操作には使用できなくなりました

ObjectContextインスタンスは削除されており、接続が必要な操作には を使用できません。

デバッガで結果のコレクションを見ると、実際のエンティティではなくDynamicProxyのリストであることがわかります。私はチェンジトラッキングを止めようとしましたが、それは助けになりませんでした。ここに私のコードは次のとおりです。

public List<ContentTypeColumn> GetContentTypeColumns(Int64 contentTypeId) 
    { 
     List<ContentTypeColumn> result = new List<ContentTypeColumn>(); 
     using (SCGREDbContext context = new SCGREDbContext()) 
     {     
      ContentType contentType = context.ContentTypes.Include("Parent").AsNoTracking().FirstOrDefault(x => x.Id.Equals(contentTypeId)); 

      result.AddRange(contentType.ContentTypeColumns.ToList()); 
      while (contentType.Parent != null) 
      { 
       result.AddRange(contentType.Parent.ContentTypeColumns.ToList()); 
       contentType = contentType.Parent; 
      }  
     } 
     return result.ToList(); 
    } 

注:この操作に関与し、私のドメインモデルを検討する必要がある場合、あなたは簡単に変えることができ、トラッキング遅延ロードとダイナミックな変化を停止する必要がある場合は、this question.

+0

レイジーロード?それが原因です。 –

+0

私はこの特定のケースでレイジーローディングを避けようとしていますが、その周りに道を見つけることができません。助言がありますか? – Kassem

+0

[エラーの解決方法] ObjectContextインスタンスが破棄され、接続が必要な操作には使用できなくなりました。(https://stackoverflow.com/questions/18398356/how-to-solve-the-エラー-the-objectcontext-instance-has-been-can-no-l) –

答えて

19

を参照することができますそれをオフ:

using (SCGREDbContext context = new SCGREDbContext()) 
{ 
    context.Configuration.ProxyCreationEnabled = false; 
    ... 
} 
+0

それでした...ありがとうございました:) – Kassem

+0

パーフェクト!これはちょうど私に多くの時間を節約しました! –

関連する問題