linq System.ObjectDisposedException - PullRequest
0 голосов
/ 06 июля 2010

У меня проблема с некоторыми данными, которые я извлек из базы данных с помощью linq.Когда я пытаюсь получить доступ к данным, я получаю следующее исключение: 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);
        }

Кто-то может мне помочь ???Танки Фабио

1 Ответ

2 голосов
/ 06 июля 2010

Да - вы возвращаете результат, который будет лениво оценен - но вы избавляетесь от контекста данных, который будет использоваться для извлечения результатов.

Параметры:

  • Загрузка результатов с нетерпением, например, позвонив ToList по результату
  • Не избавляйтесь от контекста (я не знаю, какова ситуация в Entity Framework; вы можете сойти с рук в LINQ to SQL, но это может быть не очень хорошая идея в EF)
  • Утилизировать контекст, когда вы закончите с данными

В этом случае я бы предложил использовать первый вариант - он будет безопасным и простым. Так как вы уже фильтруете результаты и , которые вы в любом случае приводите к IEnumerable<IAuction>, вы вряд ли получите нормальные недостатки материализации запроса на ранней стадии. (Если бы это было все еще IQueryable<T>, вы бы упустили возможность добавлять дополнительные биты в запрос, и они все равно были бы переведены в SQL.)

...