2011-08-08 49 views
1

所以,如果我有一些方法返回一個產品列表:關於處置的DataContext和的DataBind()

public IEnumerable<Product> List() 
    { 
     try 
     { 
      using (MyDataContext db = new MyDataContext()) 
      { 
       return db.Products.ToList(); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(ex.Message, ex); 
     } 
    } 

當我設置,讓我們說,一個Repeater有這個,因爲它的數據源:

protected void LoadList() 
{ 
    BusProducts products = new BusProducts(); 
    rptProducts.DataSource = products.List(); 
    rptProducts.DataBind(); 
} 

我上DataBind()說,我無法訪問釋放的對象(MyDataContext)錯誤..

這是正確的?即使我全部退回.ToList()

+0

你的try catch的目的是什麼?它只是「吞嚥」你的例外。我想知道是否遇到某種類型的SQL問題,這很可能會要求您查看內部異常。 – andleer

回答

4

如果您是通過綁定引用任何產品實體的導航屬性(相關的父或子實體),那麼即使使用ToList,您也會得到該異常。這是因爲訪問導航屬性需要在訪問屬性時對數據庫進行附加查詢。如果DataContext已被處置,那麼這將不起作用。

您可以通過在檢索產品數據時快速加載相關數據來避免這種情況。這是通過使用LoadWith選項的預取機制 - DataContext.LoadOptions完成的。

http://msdn.microsoft.com/en-us/library/Bb882681%28v=VS.90%29.aspx