2016-03-11 21 views
0

我正在寫MVC Web應用程序,並且我已經在一個點上陷入困​​境。MVC應用程序拋出ObjectDisposedException事件雖然我使用了ToList()方法

應用程序拋出ObjectDisposedException事件雖然我使用ToList()方法,而dbContext仍然打開。這裏是我的代碼:

數據訪問層:

 public List<CompanyCode> SearchCompanyCodes(int? projectId=null) 
    { 
     IQueryable<sl_CompanyCodes> filtered=dbContext.sl_CompanyCodes; 

     if(projectId!=null) 
     { 
      filtered = filtered.Where(cc => cc.Project_ID == projectId); 
     } 

     return filtered.ToList(); 
    } 

經營業務邏輯層:

 public List<CompanyCode> CompanyCodes(int? cc_projectId=null) 
    { 
     List<CompanyCode> result; 

     using(var repository=new E6Repository()) 
     { 
      result=repository.SearchCompanyCodes(projectId:cc_projectId); 
     } 
     // E6Repository.Dispose calls dbContext.Dispose() 

     return result; 
    } 

控制器:

 public JsonResult CompanyCodes() 
    { 
     var logic = new GetDataLogic(); 

     List<CompanyCode> l = logic.CompanyCodes(); 

     return Json(l, JsonRequestBehavior.AllowGet); 
    } 

我不知道該怎麼辦...當我在控制器返回操作之前停止調試器時,當我在即時窗口中輸入l時,我可以看到填充良好的列表(注意:這一點dbContext已經配置)。有趣的是:如果我將ActionResult作爲模型更改爲IEnumerable<CompanyCode>,響應很好,並且沒有錯誤。

任何人都可以解釋我發生了什麼事嗎?

+0

什麼不顯示是如何控制器邏輯工作。通過更改爲強類型,您可以要求MVC Binder提供強大的類型。所以這是一個活頁夾,它使用活頁夾知道的值來創建類型。這是第一次獲得還是發佈? –

+0

請顯示CompanyCode及其映射的代碼。這可能是一個懶加載問題。 – jbl

回答

0

我想你還沒有創建你的EF上下文的實例。試試這個:

public List<CompanyCode> SearchCompanyCodes(int? projectId=null) 
{ 
    using (var context = new dbContext()) 
    { 
     IQueryable<sl_CompanyCodes> filtered = from compCodes in dbContext.sl_CompanyCodes 
               select compCodes; 
    } 

     if(projectId!=null) 
     { 
      filtered = filtered.Where(cc => cc.Project_ID == projectId); 
     } 

    return filtered.ToList(); 
} 
相關問題