0

ASP.NET MVC 4 Razor 프로젝트의 데이터 바인딩 및 기타 데이터 조작을 위해 ADO.NET 엔터티 모델을 사용하고 있습니다.ASP.NET MVC 프로젝트의 ADO.NET 엔터티 모델에 대해 이미 열려있는 DataReader

나는이 같은 데이터 바인딩, 내 모델에서, 노력하고있어 내 Controller : 나는 라인 (26)에 도달

http://ideone.com/GvskaG

:

26. Sender = db.GetLoginByUserId(item.sender_id).FirstOrDefault(), 
27. Receiver = db.GetLoginByUserId(item.recv_id).FirstOrDefault(), 

을 나는 그런 받고 있어요 오류 :

{ "이 연결과 관련된 열린 DataReader가 이미 있습니다. 먼저 닫아야합니다."}

실제로 ADO.NET 엔터티가 너무 자동으로 DataReader 또는 연결을 닫기위한 여는 내용을 정의하지 않았기 때문에 수동으로 닫는 방법을 이해할 수 없습니다. GC가 쓰레기를 collectiing 때

15. var currentUserId = db.GetUserIdByLogin(Request.Cookies["user-name"].Value); 

그리고 연결/DataReader를을 열 않는 엔티티 모델 만 중괄호 } 기호 후에 제거 :

나는이 때문에 15 번째 라인이 될 수 있다고 생각 .

단일 메서드에서 하나만 호출 할 수있는 것처럼 보이지만 Entity 모델에서 더 많은 호출을 원한다면 어떻게 수행 할 수 있습니까?

감사합니다.

답변

0

아마도 지금 foreach 루프에 있습니까? 이는 루프 내부에서 n + 1 (항목 당 쿼리)을 수행하는 동안 첫 번째 리더를 통해 foreaving하는 일반적인 방법입니다. 보통 수정 (하나의) 위치 : 이미 리더가 전에 완료되도록

  • 이리스트/배열로 외부 루프 버퍼를 사용할 수 있도록

    • 구성 질의 간절히 중첩 데이터를 페치 내부 루프가 시작된다.
  • +0

    나는 컨트롤러 코드의 소스 코드를 http://ideone.com/jE6Ps1로 바꾸었다. 데이터는 예외없이 꽤 잘 묶여있다. 조언 주셔서 감사합니다, 마크,하지만 새 코드가 매우 못 생겼다고 생각합니다. (엔티티 모델이 너무 기발한가요? –