linq System.ObjectDisposedException

时间:2010-07-05 20:35:30

标签: linq dispose entities

我在使用linq从db中检索到的一些数据存在问题。 当我尝试访问数据时,我获得以下异常: System.ObjectDisposedException:已删除ObjectContext的istance,并且无法再次将其用于需要连接的操作。 这是代码:

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);
        }
有人可以帮帮我吗??? 坦克 法比奥

1 个答案:

答案 0 :(得分:2)

是的 - 您将返回一个懒惰评估的结果 - 但您正在处理将用于获取结果的数据上下文。

选项:

  • 热切地加载结果,例如通过在结果上调用ToList
  • 不要丢弃上下文(我不知道实体框架中的情况;你可以在LINQ to SQL中使用它,但在EF中可能不是一个好主意)
  • 完成数据后处理上下文

在这种情况下,我建议使用第一个选项 - 它将是安全和简单的。由于您已经将结果过滤到了IEnumerable<IAuction>,因此您不太可能在早期获得实现查询的正常缺点。 (如果它仍然是IQueryable<T>,那么你将丢弃为查询添加额外位的能力,它们仍然会被转换为SQL。)