0

我对使用 linq 从 db 检索的一些数据有疑问。当我尝试访问数据时,出现以下异常: System.ObjectDisposedException :ObjectContext 的实例已被删除,无法再次将其用于需要连接的操作。这是代码:

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);
        }

有人可以帮助我吗???坦克法比奥

4

1 回答 1

3

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

选项:

  • 急切地加载结果,例如通过调用ToList结果
  • 不要处理上下文(我不知道实体框架中的情况;您可以在 LINQ to SQL 中解决这个问题,但在 EF 中可能不是一个好主意)
  • 处理完数据后处理上下文

在这种情况下,我建议使用第一个选项 - 它既安全又简单。由于您已经在过滤结果并且无论如何都要进行转换IEnumerable<IAuction>,因此您不太可能遇到早期实现查询的正常缺点。(如果它仍然是IQueryable<T>,您将放弃向查询添加额外位的能力,并且它们仍会被转换为 SQL。)

于 2010-07-05T20:39:38.340 回答