2012-03-22 22 views
0

我正在做一個Web服務作爲一個項目,我有一個問題,我只是不能弄清楚。我認爲它有關延遲加載和我的使用聲明。Web服務中的ObjectDisposedException

繼承人我的代碼:

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 2012-03-22 11:18:59

回答

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

我猜你使用實體框架,有延遲加載啓用(這是默認設置),以及處置EF的ObjectContextGetMedium方法。當您訪問MediumRoles屬性時,EF想延遲加載集合,但它不能,因爲ObjectContext已被處置。要解決此問題,您可以更改代碼,以便在調用ToList之後處理上下文,或集合被熱切地加載到GetMedium方法中。