2010-01-13 1 views
1

저는 EF 4를 사용하고 있습니다. 지연된 실행과 프로젝트를 다른 유형으로 유지하는 방법을 찾아야합니다.다른 유형으로 투영하는 동안 EF로 지연된 실행을 유지하려면 어떻게해야합니까?

이 기존 코드 :

AppointmentRepository appointmentRepository = new AppointmentRepository(); 
var appointmentGridItems = from a in appointmentRepository.ListAppointments() 
          select new AppointmentGridItemViewModel(a); 

이 코드는 다음과 같은 런타임 예외가 발생합니다 ". 만 매개 변수가없는 생성자와 초기화 엔티티에 LINQ에서 지원됩니다"

내가 수행 한 작업을 수행하기 위해 linq 문을 모양 짓는 다른 방법이 있습니까?

문제 컨텍스트 (걱정거리 나 바링이있는 경우) : 약속 목록을 JSON으로 직렬화해야하지만 EF ObjectSet을 직렬화하면 JSON에서 순환 참조 오류가 발생합니다. 텔 레릭 (Telerik)의 ASP.NET MVC 컨트롤에서 사용하는 그리드 구성 요소는 뷰 대신 DB에서 데이터 페이징을 관리 할 수 ​​있어야하므로 리포지토리의 결과는 연기 가능해야합니다.

감사합니다.

답변

0
var appointmentGridItems = from a in appointmentRepository.ListAppointments().AsEnumerable() 
          select new AppointmentGridItemViewModel(a); 

... 할 예정입니다. 예, 아직 연기 중입니다. ToArray 또는 ToList은 연기되지 않습니다. AsEnumerable입니다.

당신이 뭔가 할 수 있다면 :

var appointmentGridItems = from a in appointmentRepository.ListAppointments() 
          select new AppointmentGridItemViewModel 
          { 
           Appointment = a 
          }; 

을 그럼 당신은 완전히 L2E 내에서 그것을 할 수 있습니다. 더 많은 예제는 this post을 참조하십시오. L2E는 POCO 투영을 지원합니다 (EF 1에서도). 매개 변수없는 생성자 만 있으면됩니다.

+0

Enumerable에 대한 지식을 얻고 답변 해 주셔서 감사합니다. – user250066