2012-03-22 8 views
0

私はプロジェクトとしてWebサービスを行っていますが、私は理解できない問題があります。私は怠惰な読み込みと私の使用しているステートメントについて何かを考える。WebサービスのObjectDisposedException

HERESに私のコード:

public List<MediumRole> MediumGetParticipants(int mediumId, int itemsPrPage, int page) 
{ 
    Medium medium = MediaHelper.GetMedium(mediumId); 

    // Check if media not is null 
    if (medium == null) return null; 

    return medium.MediumRoles.Page(page, itemsPrPage).ToList(); 
} 

私が言って例外を取得

System.ObjectDisposedException:ObjectContextをインスタンスが配置されており、もはや接続が必要な操作のために使用することはできません。 誰ですか?

+0

あなたの使用しているステートメントはどこですか?答えを得るためにコードを追加する必要があります(GetMediumなど) – Jehof

答えて

1

私が理解したように、Mediumクラスには、遅延ロードプロキシーがMediumRolesというコレクションへの参照を持っています。

MediaHelper.GetMedium(mediumId)メソッドは、Mediumが参照されるデータベースコンテキストを削除するため、例外が発生します。あなたはこのような何かを行うことができ、この問題を解決するために

public static List<MediumRole> MediumGetParticipants(int mediumId, int itemsPrPage, int page) 
    { 
     Medium medium = MediaHelper.GetMedium(mediumId); 
     // Check if media not is null 
     if (medium == null) return null; 
     using (var context = new DbContext()) 
     { 
      context.Attach(medium); 
      return medium.MediumRoles.Page(page, itemsPrPage).ToList(); 
     } 
    } 
0

私はあなたがEntity Frameworkのを使用することを推測」、遅延ロードが(それはデフォルトです)有効になっており、EFのObjectContextGetMedium方法でを配置しています。 MediumRolesプロパティにアクセスすると、EFはコレクションを遅延ロードしたいが、ObjectContextが既に破棄されているため、コレクションを読み込めません。この問題を解決するには、ToListの呼び出し後にコンテキストが破棄されるようにコードを変更したり、GetMediumメソッドでMediumRolesコレクションを読み込んだりすることができます。