2010-07-05 3 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을 호출하여
  • 을 입력하십시오.
  • 상황을 처리하지 마십시오 (Entity Framework의 상황을 모르므로 LINQ to SQL에서이 문제를 해결할 수는 있지만 좋은 생각이 아닐 수도 있습니다) EF 문맥의
  • 폐기 당신은 데이터 내가 첫 번째 옵션을 사용하는 것이 좋습니다 것이 경우

완료 할 때 - 그것은 안전하고 간단 수 있습니다. 어쨌든 의 결과를 필터링하는 경우 IEnumerable<IAuction>으로 전송되므로 검색어를 조기에 구체화하는 것이 정상적인 단점이되지는 않습니다. (여전히 IQueryable<T>이라면 쿼리에 여분의 비트를 추가하는 기능을 버리고 계속 SQL로 변환 할 수 있습니다.)

+0

안녕 Jon, 나는 firf 옵션을 시도했지만 invalidCastException을 비난했습니다. 그런 뜻일까요? // IEnumerable res = q1.Cast (); IEnumerable res2 = q1.ToList(). 캐스트 (); return res2; – trifabbio

+0

@trifabbio : 그렇지 않습니다. 다시 '캐스트'를 호출 할 필요가 없습니다. 그러나 캐스트 예외가 발생하는 경우 생성되는 객체가 'IAuction'인 경우 구현이 아니라는 것을 알 수 있습니다. –

+0

같은 문제가 있습니다. (당신 :) :) 여기에 풀어 http://stackoverflow.com/questions/3075393/how-to-cast-list-to-enumerable .. 나는 혼란 스럽네요. ( – trifabbio