2010-07-05 41 views
0

我有一些數據,我從數據庫與linq檢索數據的問題。 當我嘗試訪問數據時,我獲得以下異常: System.ObjectDisposedException:ObjectContext的istance已被刪除,無法再用於需要連接的操作。 這是代碼:linq System.ObjectDisposedException

using (ProvaDbEntities DBEntities =  
    new ProvaDbEntities(Utilities.ToEntitiesConnectionString())) 

      { 
       ObjectQuery<site> sites = DBEntities.site; 

       IEnumerable<site> q = from site in sites 

             select site; 


       { 
        ObjectQuery<auction> auctions = DBEntities.auction; 

        IEnumerable<auction> q1 = from auction in auctions 

               where auction.site == this.Name 

               select auction; 

        IEnumerable<IAuction> res = q1.Cast<IAuction>(); 

        return res; 

      } 
     } 
     catch(Exception e) 
     { 
      throw new UnavailableDbException("[GetAuctions]" + e.Message); 
     } 

有人可以幫我嗎? 坦克 法比奧

回答

2

是 - 你回來,這將是懶洋洋地評估結果 - 但你處置這將被用來獲取結果的數據上下文的。

選項:

  • 負載結果熱切,例如通過在結果上調用ToList
  • 不要處理上下文(我不知道實體框架中的情況;您可以在LINQ to SQL中避免這種情況,但它可能不是一個好主意在EF)的背景下
  • 處置,當你完成與數據

在這種情況下,我建議使用第一個選項 - 這將是安全和簡單。由於您已經在篩選結果,因此無論如何您都要投入IEnumerable<IAuction>,因此您不可能早日實現查詢的正常缺點。 (如果它仍然是IQueryable<T>,那麼你會丟掉向查詢添加額外位的能力,並且它們仍然會被轉換爲SQL。)

+0

嗨,Jon, 我嘗試過firf選項,但是我obeined an invalidCastException .. 你的意思是這樣的嗎? // IEnumerable res = q1.Cast (); IEnumerable res2 = q1.ToList()。Cast (); return res2; – trifabbio 2010-07-10 18:02:27

+0

@trifuge:不完全 - 你不需要再次調用Cast。但是如果你得到一個轉換異常,這表明如果'IAuction'創建的對象不是實現。 – 2010-07-11 06:40:25

+0

是我(你:) :)在這裏解決相同的問題 http://stackoverflow.com/questions/3075393/how-to-cast-list-to-enumerable .. 我很困惑:( – trifabbio 2010-07-11 16:34:39